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分!请大虾们帮忙!! 展开
刘XX
温XX
梁XX
罗XX
...
如何使用Math.random()方法
1、期望达到的基本功能:
main{
当我输入y时,随机点下一个
当我输入n时,退出程序
}
2、如何体现点名的公平性:假如有28个同学,无论我是否中途退出程序,总是在经过28次点名后,每个同学都保证有且仅有一次被点到名?
要一个完整的,可以直接运行的程序,谢谢!如果好,我再加50分!请大虾们帮忙!! 展开
2个回答
展开全部
按照你第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")){
// 结束程序
}
}
}
我给你个解决方案:
在每次点中一名学生后,将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")){
// 结束程序
}
}
}
展开全部
代码如下,需要建立两个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();
}
}
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();
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询