我想写一个程序,随机化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。错误可能出在哪里?
发布于 2015-03-14 15:43:15
生成数字并填充数组的循环看起来很好。唯一的问题是在最后一个循环中,它会搜索出现次数最高的数字。
您忘记了更新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");
}发布于 2015-03-14 15:46:19
试试这个:
Random r = new Random();
for (int i = 0; i <= 1000000; i++) {
int Low = 1;
int High = 45;
int R = r.nextInt(High - Low) + Low;
}https://stackoverflow.com/questions/29046650
复制相似问题