我想编写一个随机化1000000次的程序,最后选择大多数时间随机生成的1到45的数字。我写的代码是:
public class Randomizer {
public static int[][] numbers = new int[45][2];
public static int maxN = 0;
public static int finalChoice;
public static void main(String[] args){
for(int i = 0; i < 45; i++){
numbers[i][0] = i + 1;
numbers[i][1] = 0;
}
for(int i = 0; i < 1000000; i ++){
int rnd = (int)(Math.random() * 45 + 1);
for(int j = 0; j < 45; j++){
if(rnd == numbers [j] [0]){
numbers[j][1] ++ ;
break;
}
}
}
for(int i = 0; i < 45; i++){
if(maxN < numbers[i][1]){
finalChoice = numbers[i][0];
}
System.out.print(numbers[i][1]+" \t");
}
System.out.println("\nFinal Choice: "+finalChoice);
}
}
问题是它继续打印45.错误在哪里?
答案 0 :(得分:1)
生成数字并填充数组的循环看起来很好。唯一的问题是在最后一个循环中,它会搜索发生率最高的数字。
您忘记更新maxN
,因此每次迭代都会更新finalChoice
(因为maxN < numbers[i][1]
始终为真,假设从1到45的每个数字至少随机选择一次)并且它结束了45岁。
修复:
for(int i = 0; i < 45; i++){
if(maxN < numbers[i][1]){
finalChoice = numbers[i][0];
maxN = numbers[i][1]; // add this
}
System.out.print(numbers[i][1]+" \t");
}
答案 1 :(得分:0)
试试这个:
Random r = new Random();
for (int i = 0; i <= 1000000; i++) {
int Low = 1;
int High = 45;
int R = r.nextInt(High - Low) + Low;
}