JAVA编程(随机点名程序),高手来!急!

随机点名,学生初始化统一放置在文件中java0803_students.txt,格式如下:刘XX温XX梁XX罗XX...如何使用Math.random()方法1、期望达到... 随机点名,学生初始化统一放置在文件中 java0803_students.txt,格式如下:
刘XX
温XX
梁XX
罗XX
...
如何使用Math.random()方法
1、期望达到的基本功能:
main{
当我输入y时,随机点下一个
当我输入n时,退出程序
}
2、如何体现点名的公平性:假如有28个同学,无论我是否中途退出程序,总是在经过28次点名后,每个同学都保证有且仅有一次被点到名?
要一个完整的,可以直接运行的程序,谢谢!如果好,我再加50分!请大虾们帮忙!!
展开
 我来答
心灵飞行家
2008-12-24 · TA获得超过1873个赞
知道小有建树答主
回答量:493
采纳率:60%
帮助的人:276万
展开全部
按照你第2点描述,你仅仅是想实现随即顺序点名而已,并不是随即点名。

我给你个解决方案:
在每次点中一名学生后,将java0803_students.txt文件中做个标示,表示该学生已经在本轮点名中被点过。
直到所有学生都点到后情况这个表示,准备下一轮点名做标记。

下面我给你一段伪代码,包含了 random 的使用方法:

public class CallStudents(){

private static Random random = new Random();

public void call(){

// 重新设置学生被点名的标示(根据点名情况)
reset();

long value = -1;

while (true) {
value = random.nextInt(maxValue + 1); // maxValue 是你当前有学生的最大数目

//在这里读取当前随即号对应的学生记录
String student = getStudentByID(value);

//判断该学生是否被点过名
if(!checkCalled(student)){
// 设置已经点过名
setCalled(student);
// 在控制台上显示被点名的学生信息
system.out.println(student);

// 结束循环
break;
}
}

}

private String getStudentByID(long id){
// 这个是读取文件,需要你自己实现的
// 返回 java0803_students.txt 文件中对应的学生记录
}

private boolean checkCalled(String student){
// 至于是什么样的规则,有你自己定义
// 我这里给你举个例子
// 如果这条学生记录中包含 一个字符为 called 的话,表明这名学生被点过名
if(student.indexOf("called") != -1){
retrn true;
}
return false;
}

private void setCalled(String student){
// 至于是什么样的规则,有你自己定义
// 我这里给你举个例子
// 设置学生已被点名
student += "_called";
// 将这个值重新写回到你的java0803_students.txt 文件中,覆盖愿信息!

}

private void reset(){
// 判断是否所有学生都被点过名,如果点过名,清空所有学生被点名的标记
// 这个实现有你自己定义,
// 这里我给你举个例子

// 读取文件,判断每一个学生信息是否都标有 called
// 如果都有,执行删除所有 called 的操作,并保存文件。

// 如果只有部分没有,则表明本轮点名没有结束,不做任何操作。
}

public static void main(String[] args){

String con = // 接受控制台信息

if(con.equals("y")){
CallStudents call = new CallStudents();
call.call();
}

if(con.equals("n")){
// 结束程序
}

}
}
xiliantian
2008-12-24 · TA获得超过1849个赞
知道大有可为答主
回答量:648
采纳率:0%
帮助的人:894万
展开全部
代码如下,需要建立两个txt,一个为a.txt,用来保存原有名单,另外一个为b.txt用来保存点名后的名单,在运行时可选,是否继续上次点名还是开始新的点名, 程序完整,放入两个txt文件后即可运行,请检测
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Student {
List stuList = new ArrayList();

/**
* 点名
* @throws IOException
*/
public void calling() throws IOException{
while(true){
System.out.println("点名请按【Y】,退出请按【N】:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
if(input.toLowerCase().equals("y")){
int noNum = (int) (Math.random()*this.stuList.size());
String name = (String) this.stuList.get(noNum);
this.stuList.remove(noNum);
System.out.println("当前点名用户为:"+name);
}else if(input.toLowerCase().equals("n")){

String s;
File f=new File("b.txt");
FileOutputStream fos =new FileOutputStream(f);
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(fos));

while (stuList.size() != 0) {
String name = (String)stuList.get(0);
System.out.println("存入name="+name);
bw.write(name);
bw.newLine();
stuList.remove(0);
}
bw.flush();
bw.close();

break;
}
}

}

/**
* 读入学生信息
* @param fileName
* @return
* @throws Exception
*/
public void readStudent(String fileName) throws Exception {
Scanner sc = new Scanner(new File(fileName)).useDelimiter("\n");
int count = 0;
while(sc.hasNext()){
count++;
String name = sc.next();
System.out.println(count+"="+name);
this.stuList.add(new String(name));
}
}

/**
* 存入学生信息
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
Student stu = new Student();
System.out.println("开始新的点名【1】,继续上次点名【2】:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
String newFileName = "a.txt";
String oldFileName = "b.txt";
if(input.toLowerCase().equals("1")){
stu.readStudent(newFileName);
}else if(input.toLowerCase().equals("2")){
stu.readStudent(oldFileName);
}
stu.calling();
}

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式