Java Homework - 将计数存储到数组中

时间:2014-03-28 21:26:33

标签: java arrays store

我正在尝试编写一个程序,将随机数的计数存储到单维数组中。将数字计数分配给数组时,我遇到了问题。这是一个逻辑错误,它编译得很好。感谢。

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]);
    }
}

2 个答案:

答案 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] );
    }
}