哪位高手帮我看一下这个JAVA程序,如何才能让它输入信息
importjava.io.*;importjava.util.*;publicclassNicki{publicstaticvoidmain(String[]agrs)...
import java.io.*;
import java.util.*;
public class Nicki {
public static void main(String[] agrs){
System.out.println("抽奖例子!");
FileInputStream fin=null;
BufferedReader bread=null;
Vector<student> vec =new Vector<student>();
try{//路径自己写一下
fin=new FileInputStream("E:\\1班.txt");
bread=new BufferedReader(new InputStreamReader(fin));
String strm="";
do{
student stu=new student();
try{
strm=bread.readLine();
if(strm!=null){
stu.setMes(strm);
vec.add(stu);
}
else{
break;
}
}catch(IOException e2){
System.out.println("IO异常");
}
}while(strm!=null);
}
catch(FileNotFoundException e){
System.out.println("IO异常!未发现studentTable2.txt");
}
show("信息录入完毕!\n,其实开始报数的同学编号可以使随机的,这里就依题意取18");
//下面开始抽奖
int stat=18;//开始的同学编号可以是随机的
int add=18;//每次报的最大数也可以是随机的,
//因为如果都是定值的话,那么出来的学生就是确定的,并不公平
int index=stat-1;//表示在列表中的索引
int outCount=0;
while(vec.size()>10){
index=(index+add)%vec.size();
//下面的同学淘汰了哦
student sout=vec.elementAt(index);
vec.removeElementAt(index);//退出队列
outCount++;
show("第"+outCount+"位同学:"+sout.getName()+"退出队列!");//可以注释掉
}
show("************\n现在剩下10名同学或得奥运门票!!\n他们是:");
for(int i=0;i<vec.size();i++){
show(vec.elementAt(i).toString());
}
String temp="ABCXYZabcxyz";
for(int i=0;i<temp.length();i++){
show(temp.charAt(i)+"---"+(int)temp.charAt(i));
}
}
public static void show(String str){
System.out.println(str);
}
}
class student{
private int no;
private int id;
private String name;
private String sex;
public int getNo(){return no;}
public void setNo(int no){this.no=no;}
public int getId() { return id; }
public void setId(int id) {this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getSex() { return sex; }
public void setSex(String sex) {this.sex = sex; }
public String toString(){
return "序号"+this.no+",学号"+this.id+",名字:"+this.name+",性别:"+this.sex;
}
public void setMes(String str){
char[] ch=str.toCharArray();
int step=0;
String d="";
String a="";
String b="";
String c="";
for(int i=0;i<ch.length;i++){
if(ch[i]==' '){
step++;
}else{
if(step==0){
d+=ch[i];
}else if(step==1){
a+=ch[i];
}else if(step==2){
b+=ch[i];
}
else if(step==3){c+=ch[i];
}
}
}
this.setNo(Integer.parseInt(d));
this.setId(Integer.parseInt(a));
this.setName(b);
this.setSex(c);
}
}
现有运动会门票要赠与你们班(两个班各有67人,学号从1到67)的10个幸运儿,要求采用约瑟夫序列来抽签,全班以学号顺序排号围坐在一张圆桌周围。从编号为18的人开始顺序报数,数到18的那个人出列;他的下一个人又从1开始报数,数到18的那个人又出列;依此规律重复下去,直到圆桌周围的剩下10个人就是幸运儿。程序有如下要求:
a) 读取你们班名单文本文件的内容,存入一个单向链表,并以学号排序,节点要求保存学号,姓名和性别等信息。
b) 针对这个链表进行以上的问题求解。
c) 程序输出10个幸运儿的序号,学号,姓名,性别 展开
import java.util.*;
public class Nicki {
public static void main(String[] agrs){
System.out.println("抽奖例子!");
FileInputStream fin=null;
BufferedReader bread=null;
Vector<student> vec =new Vector<student>();
try{//路径自己写一下
fin=new FileInputStream("E:\\1班.txt");
bread=new BufferedReader(new InputStreamReader(fin));
String strm="";
do{
student stu=new student();
try{
strm=bread.readLine();
if(strm!=null){
stu.setMes(strm);
vec.add(stu);
}
else{
break;
}
}catch(IOException e2){
System.out.println("IO异常");
}
}while(strm!=null);
}
catch(FileNotFoundException e){
System.out.println("IO异常!未发现studentTable2.txt");
}
show("信息录入完毕!\n,其实开始报数的同学编号可以使随机的,这里就依题意取18");
//下面开始抽奖
int stat=18;//开始的同学编号可以是随机的
int add=18;//每次报的最大数也可以是随机的,
//因为如果都是定值的话,那么出来的学生就是确定的,并不公平
int index=stat-1;//表示在列表中的索引
int outCount=0;
while(vec.size()>10){
index=(index+add)%vec.size();
//下面的同学淘汰了哦
student sout=vec.elementAt(index);
vec.removeElementAt(index);//退出队列
outCount++;
show("第"+outCount+"位同学:"+sout.getName()+"退出队列!");//可以注释掉
}
show("************\n现在剩下10名同学或得奥运门票!!\n他们是:");
for(int i=0;i<vec.size();i++){
show(vec.elementAt(i).toString());
}
String temp="ABCXYZabcxyz";
for(int i=0;i<temp.length();i++){
show(temp.charAt(i)+"---"+(int)temp.charAt(i));
}
}
public static void show(String str){
System.out.println(str);
}
}
class student{
private int no;
private int id;
private String name;
private String sex;
public int getNo(){return no;}
public void setNo(int no){this.no=no;}
public int getId() { return id; }
public void setId(int id) {this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getSex() { return sex; }
public void setSex(String sex) {this.sex = sex; }
public String toString(){
return "序号"+this.no+",学号"+this.id+",名字:"+this.name+",性别:"+this.sex;
}
public void setMes(String str){
char[] ch=str.toCharArray();
int step=0;
String d="";
String a="";
String b="";
String c="";
for(int i=0;i<ch.length;i++){
if(ch[i]==' '){
step++;
}else{
if(step==0){
d+=ch[i];
}else if(step==1){
a+=ch[i];
}else if(step==2){
b+=ch[i];
}
else if(step==3){c+=ch[i];
}
}
}
this.setNo(Integer.parseInt(d));
this.setId(Integer.parseInt(a));
this.setName(b);
this.setSex(c);
}
}
现有运动会门票要赠与你们班(两个班各有67人,学号从1到67)的10个幸运儿,要求采用约瑟夫序列来抽签,全班以学号顺序排号围坐在一张圆桌周围。从编号为18的人开始顺序报数,数到18的那个人出列;他的下一个人又从1开始报数,数到18的那个人又出列;依此规律重复下去,直到圆桌周围的剩下10个人就是幸运儿。程序有如下要求:
a) 读取你们班名单文本文件的内容,存入一个单向链表,并以学号排序,节点要求保存学号,姓名和性别等信息。
b) 针对这个链表进行以上的问题求解。
c) 程序输出10个幸运儿的序号,学号,姓名,性别 展开
1个回答
2010-09-27
展开全部
这不就是我给你写的那个例子改写的吗?怎么了,不满足要求吗?
a 读取班级内容没问题啊,只不过没有用单向链表而已,在Vector里面我是以文本的顺序添加进去的,只要班级文本文件里面是按照学号递增排列的,那么就能够保证Vector里面也是按照学号的递增来排序的,所以我感觉也应该满足要求啊。
b 确实能够求出中将的,并且是正确的10名学生啊。
c 你可以把每位同学出队时的输出语句注释掉,最后的输出信息就是10名学生的信息啊。
所以,综上,我不明白是什么地方还没有满足你的要求呢?这里是输出一个班的中奖名单,如果要另一个班的名单,就把文本路径改成零一个班的路径就行了啊。
难道你的意思是非得用单向链表吗?我很郁闷啊……(呵呵,我也玩匿名……)
a 读取班级内容没问题啊,只不过没有用单向链表而已,在Vector里面我是以文本的顺序添加进去的,只要班级文本文件里面是按照学号递增排列的,那么就能够保证Vector里面也是按照学号的递增来排序的,所以我感觉也应该满足要求啊。
b 确实能够求出中将的,并且是正确的10名学生啊。
c 你可以把每位同学出队时的输出语句注释掉,最后的输出信息就是10名学生的信息啊。
所以,综上,我不明白是什么地方还没有满足你的要求呢?这里是输出一个班的中奖名单,如果要另一个班的名单,就把文本路径改成零一个班的路径就行了啊。
难道你的意思是非得用单向链表吗?我很郁闷啊……(呵呵,我也玩匿名……)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询