简介
这个程序实现起来十分简单,主要利用的是随机函数和枚举。通过多次的随机数抽取并且在相应的枚举值后面计数,统计出抽取次数最多的名字。
代码
创建一个枚举文件NameTable.java,枚举出名单,括号中的是随机数点到名的次数。后面就是计数的功能。
package randomSelect;
enum NameTable {
//枚举值:8个
王(0), 周(0), 祝(0), 罗(0), 李(0), 卜(0), 唐(0), 刘(0);
//计数
private int count;
//get方法
public int getCount() {
return count;
}
//set方法
public void setCount(int count) {
this.count = count;
}
//构造函数
private NameTable(int c) {
c = count;
}
}
接下来就是生成随机数,抽取出幸运者。不断地抽取并且计数。
package randomSelect;
import java.util.ArrayList;
public class RandomSelect {
private static NameTable award;
static int CompareNum = 0;
private static NameTable Lucky;
//设置一个集合,用于存放随机产生的结果
static ArrayList<NameTable> NameList = new ArrayList<NameTable>();
public static void main(String[] args) throws InterruptedException {
int Num, Count = 1;
System.out.println("Let's starting !");
//循环生生100个随机数
for (int i = 0; i < 100; i++) {
Num = (int) (Math.random() * 8);
在NameTable.java中找到对应的坐标0 1 2 3···
award = NameTable.class.getEnumConstants()[Num];
//输出名单,满10个换行
if (i % 10 == 0)
System.out.println("\n");
System.out.print(award + " ");
NameList.add(award);
// Thread.sleep(1000); //每生成一个名字休息1秒钟
}
System.out.println("\n\nThank you !\n\n");
//计数功能:在名单中搜索与名字相同的个数
for (int j = 0; j < NameList.size(); j++) {
for (int z = 0; z < NameList.size(); z++) {
if (NameList.get(j).equals(NameList.get(z))) {
NameList.get(j).setCount(Count++);
}
}
Count = 1;
//恢复初始计数值,count=1是因为搜索时自身没有算进去,
//所以开始时手动设置为1,而不是0
}
//输出枚举表单名和参数
for (NameTable list : NameTable.values()) {
//获取幸运者
if (list.getCount() > CompareNum) {
CompareNum = list.getCount();
Lucky = list;
}
System.out.println("恭喜 " + list + " 被点名" + list.getCount() + " 次!");
}
System.out.println("\n\n今晚的幸运观众是 " + Lucky + " !");
}
}
效果