【问题标题】:System.out.print the winning line onlySystem.out.print 仅中奖线
【发布时间】:2021-12-31 12:28:00
【问题描述】:

我有一个 Java 彩票游戏任务,并且我正在运行一个 while 循环以防止结果中的数字重复。 我得到一个没有重复的数字列表,但是System.out.print 正在返回所有行,直到我得到最后一个没有重复的行。有没有办法只打印最后的“获胜”行?

代码如下

while (numCount<=9) {
  int randNumber = rand.nextInt(99)+1;
  if (results[0] == randNumber || results[1] == randNumber || results[2] == randNumber || results[3] == randNumber ||
        results[4] == randNumber || results[5] == randNumber || results[6] == randNumber || results[7] == randNumber 
        || results[8] == randNumber || results[9] == randNumber) {
    
  } else {
    Array.setInt(results, numCount, randNumber);
    numCount++;
  }
    
  System.out.print("The Lottery Numbers are: ");
    
  for (int i=0; i<10; i++)
      //add a 0 in front of the number is it's less that 10
    if (results[i] <10) {
      System.out.print("0"+results[i]+" ");
    }
}

【问题讨论】:

  • 将你的 print for 循环带出 while 循环。
  • 您可以将结果数组替换为Set&lt;Integer&gt; 并应用contains

标签: java while-loop duplicates system.out


【解决方案1】:

您可以更简单地执行此操作,依赖于 Set 中没有重复对象这一事实。

public static void main(String[] args) {
    Random rand = new Random();
    Set<Integer> winningNumbers = new HashSet<>();

    while (winningNumbers.size() < 9) {
        int randNumber = rand.nextInt(99) + 1;
        winningNumbers.add(randNumber);
    }

    System.out.print("The Lottery Numbers are: ");
    for (Integer number : winningNumbers) {
        //add a 0 in front of the number is it's less that 10
        if (number < 10) {
            System.out.print("0" + number + " ");
        } else {
            System.out.print(number + " ");
        }
    }
}

您甚至可以简化打印数字的方式,依靠 printf()%02d,这意味着使用 0 填充作为打印数字 2 的最大宽度:

public static void main(String[] args) {
    Random rand = new Random();
    Set<Integer> winningNumbers = new HashSet<>();

    while (winningNumbers.size() < 9) {
        int randNumber = rand.nextInt(99) + 1;
        winningNumbers.add(randNumber);
    }

    System.out.print("The Lottery Numbers are: ");
    System.out.printf("%02d %02d %02d %02d %02d %02d %02d %02d %02d", winningNumbers.toArray());
}

在您的代码中,只需将行 System.out.print("The Lottery Numbers are: "); 移动到 while 循环之前,将循环 for (int i=0; i&lt;10; i++) 移动到 while 循环之后,如下所示:

System.out.print("The Lottery Numbers are: ");
while (numCount<=9) {
    int randNumber = rand.nextInt(99)+1;
    if (results[0] == randNumber || results[1] == randNumber || results[2] == randNumber || results[3] == randNumber ||
            results[4] == randNumber || results[5] == randNumber || results[6] == randNumber || results[7] == randNumber
            || results[8] == randNumber || results[9] == randNumber) {
        
    } else {
        Array.setInt(results, numCount, randNumber);
        numCount++;
    }
}

for (int i=0; i<10; i++)
    //add a 0 in front of the number is it's less that 10
    if (results[i] <10) {
        System.out.print("0"+results[i]+" ");
    }

【讨论】:

  • 感谢您的回复!在课堂上,我们还没有使用过 HashSet 或 Formatter,我们被特别告知不要在这个作业中使用 formatter。我已经尝试了您的建议并且效果很好,所以我会记住这一点以供将来参考。
  • 当我按照自己的方式进行操作时,使用他展示的课程,我得到以下结果中奖号码的总和是:449彩票号码是:91 88 74 12 95 66 23 56 00 00 总和中奖号码为:505 中奖号码为:91 88 74 12 95 66 23 56 67 00 中奖号码总和为:572 中奖号码为:91 88 74 12 95 66 23 56 67 00 中奖号码总和是:572彩票号码是:91 88 74 12 95 66 23 56 67 15 中奖号码总和是:587
  • 我已经用你的代码更新了我的答案,你需要做一些修复以避免输出中出现重复的行。请检查一下;)谢谢!
  • 成功了! :)
  • 我很高兴能帮上忙! ;)
猜你喜欢
  • 2018-10-29
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-10
相关资源
最近更新 更多