我给你个解决方案:
在每次点中一名学生后,将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")){
// 结束程序
}
}
}
import java.awt.GridLayoutimport java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.util.ArrayList
import java.util.Arrays
import java.util.List
import java.util.Scanner
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JTextField
public class test {
static String[] arr
static boolean flag=true
static List<String>a
static JTextField jtf
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame=new JFrame()
frame.setLayout(new GridLayout(1,2))
JButton button = new JButton("抽奖")
jtf = new JTextField()
frame.add(jtf)
frame.add(button)
a = new ArrayList<String>()
arr = new String[]{"张三","李四","王五"}
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
int i=0
fond:
while(true){
String str = arr[(int)(Math.random()*arr.length)]
for(String b:a){
if(b.equals(str)){
if(i>=arr.length){
jtf.setText("没有人了")
break fond
}
continue fond
}
i++
}
a.add(str)
jtf.setText(str)
break
}
}
})
frame.setSize(500, 500)
frame.setLocation(500, 500)
frame.setVisible(true)
}
}
随机函数那里肢喊携有问题了 ,修改如下import java.awt.Button
import java.awt.Toolkit
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.util.ArrayList
import java.util.List
import javax.swing.*
public class Window extends JFrame {
List<历伏String>names = new ArrayList<String>()
Button but = new Button("随即点名")
JTextField jtf = new JTextField(15)
JLabel jl = new JLabel("姓名为:")
public Window(){
this.init()
this.addComponent()
this.addListener()
}
private void addListener() {
but.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
jtf.setText(names.get((int) (Math.random()*names.size())))
}
})
}
private void addComponent() {
JPanel p = new JPanel()
p.add(jl)
p.add(jtf)
p.add(but)
this.add(p)
}
private void init() {
this.setSize(400,400)
center(this)
this.setTitle("随即点名器"渗陵)
names.add("a")
names.add("b")
names.add("c")
names.add("d")
names.add("e")
}
public static void center(Window win) {
int width = win.getWidth()
int height = win.getHeight()
Toolkit tool = Toolkit.getDefaultToolkit()
int screenWidth = tool.getScreenSize().width
int screenHeight = tool.getScreenSize().height
win.setLocation((screenWidth - width) / 2, (screenHeight - height) / 2)
}
public static void main(String [] args){
JFrame jf = new Window()
jf.setVisible(true)
jf.setDefaultCloseOperation(EXIT_ON_CLOSE)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)