我正在尝试编写一个程序,将随机数的计数存储到单维数组中。将数字计数分配给数组时,我遇到了问题。这是一个逻辑错误,它编译得很好。感谢。
public class PP67 {
public static void main(String[] args) {
int zero =0, one=0, two=0, three=0, four=0, five=0, six=0, seven=0, eight=0, nine=0;
int[] counts = new int[10];//create array
int i;
for(i = 0; i < 100; i++) {
int rand = (int)(Math.random()*10); //generate 100 random ints between 0-9
if (rand == 1){ //assign the random number counter to the array
one++;
counts[0] = one;
} else if (rand == 2) {
two++;
counts[1] = two;
} else if (rand == 3) {
three++;
counts[2] = three;
} else if (rand == 4) {
four++;
counts[3] = four;
} else if (rand == 5) {
five++;
counts[4] = five;
} else if (rand == 6) {
six++;
counts[5] = six;
} else if (rand == 7) {
seven++;
counts[6] = seven;
} else if (rand == 8) {
eight++;
counts[7] = eight;
} else if (rand == 9) {
nine++;
counts[8] = nine;
} else if (rand == 0) {
zero++;
counts[9] = zero;
}
}
System.out.println("The count for number 1 is: " + counts[0]); //need outside count loop
System.out.println("The count for number 2 is: " + counts[1]);
System.out.println("The count for number 3 is: " + counts[2]);
System.out.println("The count for number 4 is: " + counts[3]);
System.out.println("The count for number 5 is: " + counts[4]);
System.out.println("The count for number 6 is: " + counts[5]);
System.out.println("The count for number 7 is: " + counts[6]);
System.out.println("The count for number 8 is: " + counts[7]);
System.out.println("The count for number 9 is: " + counts[8]);
System.out.println("The count for number 0 is: " + counts[9]);
}
}
答案 0 :(得分:3)
问题在于:
int rand = (int)Math.random()*10;
施放为higher precedence而不是乘法。
由于Math.random
会在[0, 1[
中返回一个双倍(因为documentation个状态),之后将其转换为int
,结果总是为0.所以你&#39 ;总是做0 * 10
。因此rand
始终为0。
首先将随机数乘以10,然后将其转换为int
。
int rand = (int)(Math.random()*10);
您也可以使用nextInt(int n)
类中的Random
方法。
Random r = new Random();
int rand = r.nextInt(10); //will generate a random number in [0, 9]
答案 1 :(得分:0)
1)您不需要在变量1,2和3中以及数组计数中保留相同的信息。
2)表达式int rand = (int)(Math.random()*10)
始终返回0
。要在[0,9]中生成随机数,最好使用
Random r = new Random();
int rand = r.nextInt(10);
3)您不需要所有这些if-else if
条件,您可以使用随机数作为数组计数的索引。
private final static int REP = 100;
private final static int MAX = 10;
public static void main(String[] args) {
Random rand = new Random(System.currentTimeMillis());
int[] counts = new int[MAX];
for(int i=0; i<REP; i++)
{
int n = rand.nextInt(MAX);
counts[n]++;
}
for(int i=0; i<MAX; i++)
{
System.out.printf("The count for number %d is: %d \n", i, counts[i] );
}
}