【问题标题】:Java Challenge for beginners: Generate random numbers in a while loopJava初学者挑战:在while循环中生成随机数
【发布时间】:2012-01-28 22:11:08
【问题描述】:

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

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

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

我可以得到一些指导吗?

【问题讨论】:

  • 您可以使用大小为 100 的布尔数组。
  • 这不是挑战;这是家庭作业。
  • 简单的家庭作业。那种东西……好吧,我会保持安静。
  • 如果我不知道什么 - 我问,所以为自己保留智能 cmets
  • 为了让这个更有趣,你可以使用两个longs,而不是100个bools的数组。提示:使用逐位杂技。

标签: java


【解决方案1】:

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

【讨论】:

  • +1 用于建议散列集。不过,对于这项任务,java.util.HashSet 可能比 HashMap 更适合。
【解决方案2】:

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

显然有更有效的方法,但我认为现在就可以了。

【讨论】:

  • 很遗憾,Russell 先生还没有向我介绍 ArraList,所以它必须是另一种方式。
  • @lemmetry 我真的不明白comp sci学生似乎有这种“我没有在课堂上学过,所以它被禁止”的态度。大学就是自我导向的学习
【解决方案3】:

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

【讨论】:

    【解决方案4】:
    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;
                }
    
            }
    

    【讨论】:

      【解决方案5】:

      在我看来,逻辑是初始化一个 100 长度的数组,以及一个零索引的计数器变量。如果为真,则创建一个介于 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++;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-26
        • 1970-01-01
        • 2014-02-28
        相关资源
        最近更新 更多