十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
按照你第2点描述,你仅仅是想实现随即顺序点名而已,并不是随即点名。
十余年的大洼网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销的优势是能够根据用户设备显示端的尺寸不同,自动调整大洼建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“大洼网站设计”,“大洼网站推广”以来,每个客户项目都认真落实执行。
我给你个解决方案:
在每次点中一名学生后,将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")){
// 结束程序
}
}
}
//首先我们可以先把名字搞成一个数组,或者List都是可以的。
String[] arr = {"张三","李四","王五","xxx"....};
String random = arr[new Random().nextInt(arr.size())];
System.out.println("随机名字为:"+random);
最简单的一个,你把所有名字存进一个数组,下面是关键代码
String[] nameList={"张三","李四","王五"......};//名单全部写上去就可以了
int rdmNum=(int)(Math.random()*nameList.length)//随即生成0---“总人数-1”的数字,正好对应数组的索引
System.out.println(nameList[ramNum]);//输出对应的人名
简单吗?关键代码我都给写出来了哦,用小软件把它生成一个EXE文件就可以用了。
import java.awt.GridLayout;
import 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 ListString 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 ArrayListString();
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.io.BufferedInputStream;import java.util.Scanner; public class test1 { public static void main(String[] args) { Scanner cin = new Scanner(new BufferedInputStream(System.in)); int n = cin.nextInt(); // 输入n个数 int[] a = new int[n]; for (int i = 0; i n; ++i) { a[i] = cin.nextInt(); } cin.close(); for (int i = a.length - 1; i = 0; --i) { // 逆序输出 System.out.print(a[i] + " "); } }}
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class Test {
// 实现思路:给每个key设置一个权重,权重越大被取到的概率越大,
// 然后根据权重生成一个连续的大的数据区间,权重越大占用的区间长度越大,
// 在这个连续的大区间中取随机数,取到的数落在哪个区间就取出该区间
// 对应的key,从而实现了根据权重控制key获取的概率
public static final Mapint[], String INTERVAL = new HashMap();
public static int limit = 0;
static {
// 权重,表示被选中的机会大小
MapString, Integer WEIGHT = new HashMap();
WEIGHT.put("a", 1);
WEIGHT.put("b", 5);
WEIGHT.put("c", 10);
WEIGHT.put("d", 20);
for (Map.EntryString, Integer entry : WEIGHT.entrySet()) {
String key = entry.getKey();
int value = entry.getValue();
INTERVAL.put(new int[]{limit, limit + value}, key);
limit += value;
}
}
// 随机获取一个key
public static String getRandomKey() {
// 获取一个指定范围内的随机数
int ran = new Random().nextInt(limit);
for (Map.Entryint[], String entry : INTERVAL.entrySet()) {
int[] key = entry.getKey();
String value = entry.getValue();
if (ran = key[0] ran key[1]) {
return value;
}
}
return null;
}
public static void main(String[] args) {
// 随机取WEIGHT中的key,统计每个key被取到的次数
MapString, Integer count = new HashMap();
for (int i = 0; i 1000000; i++) {
String k = getRandomKey();
if (count.containsKey(k)) {
count.put(k, count.get(k) + 1);
} else {
count.put(k, 1);
}
}
// 执行结果可以看出每个key取到的次数和设置的权重所占比例比较接近,
// 取得次数越多比例越精确
for (Map.EntryString, Integer entry : count.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + ":" + value);
}
}
}