初学者的Java挑战:在while循环中生成随机数

时间:2012-01-28 22:11:09

标签: java

这一挑战来自第4章"Java Programming For Absolute Beginners" by Joseph P. Russell.

  

编写一个while循环,生成1到100之间的随机数   在两次生成相同的数字后停止循环。

我最关心的是我无法弄清楚如何继续初始化数组(如果你在这里使用数组),因为我不知道数组的大小(如果这有意义的话)。

我能获得一些指导吗?

5 个答案:

答案 0 :(得分:9)

如果随机数仅在1和100之间生成,则使用大小为100的数组。但是,通常,问题通过更通用的关联容器来解决,例如, HashMap,不需要连续键。

答案 1 :(得分:2)

如果“你不知道数组的大小”那么你需要一个动态增长的“数组”......这是一个ArrayList

显然有更有效的方法,但我认为现在这样就好了。

答案 2 :(得分:0)

您还可以使用Java Set的实现,这可以确保没有重复的元素(检测重复的简单方法)。但是,声明一个简单的int[] numbers = int[100]();数组也可以解决这个问题: - )。

答案 3 :(得分:0)

boolean yourLoop = true;
    //you'll need to import java.util.ArrayList;
    ArrayList yourNumber = new ArrayList();

    //condition so your loop will run
        while (yourLoop){

            //get your first number to put in the array list, you need to cast as an int 
            int randNumber = (int)(Math.random() * 100);
            //condition to check if the number is in the array list
            if (yourNumber.contains(randNumber)) {
                //print out the number that matched
                System.out.println(randNumber);
                //break the while loop
                yourLoop = false;
            }
            else {
                //add the number to your array list
                yourNumber.add(randNumber);
                //print out the array list
                System.out.println(yourNumber);
                //get another iteration
                yourLoop = true;
            }

        }

答案 4 :(得分:0)

在我看来,逻辑就是初始化一个100长度的数组,以及一个零索引的计数器变量。如果为true,则创建1到100之间的随机轮数。检查数组中生成的数字的索引。如果找不到,则添加数字并递增计数器。

以下是伪代码。

int nums[] = new int[100];
counter = 0;
while(true) {
    test = random(1, 100);
    if(nums.indexOf(test) != -1) {
        return;
    }

    nums[counter] = test;
    counter++;
}