2017-10-15 93 views
1

下面的代码将生成6个随机数,但在输出时它将显示4,5或6个数字。我一直需要六个数字来评估。有人可以引导我到我需要改变以获得一致的输出。 谢谢。java输出在输出时必须有6个数字时间

package net.javavideotutorials.assignment1; 

import java.util.HashSet; 
import java.util.Random; 
import java.util.Set; 

public class LotteryNumberGenerator 
    { 
     public static <generateLotteryNumbers> void main(String[] args) 
    { 

     int capacity = 6; 
     HashSet<Integer> generateLotteryNumbers = new HashSet<Integer> 
     (capacity); 
     Random r = new Random(); 

     do { 
     int next = r.nextInt(50); 
     if(!generateLotteryNumbers.contains(r.nextInt(50))); { 
      generateLotteryNumbers.add(next); 
      capacity--; 

     } 
       while (capacity > 0); 
     { 
       generateLotteryNumbers.stream().forEach(n- 
       >System.out.println(n)); 
    } 
+0

你写了,而没有关闭正确的括号... – alfasin

+0

你已发布的内容不能编译。请发布您的实际代码。 – azurefrog

回答

1

语法错误很少;缺少围绕do的句子(你只关闭了if),最后缺少花括号,并且 - >分成两行。

你还有一个;之后,如果条件...

我已经重新格式化的代码,使事情更清晰。

public class LotteryNumberGenerator { 
    public static <generateLotteryNumbers> void main(String[] args) { 

     int capacity = 6; 
     HashSet<Integer> generateLotteryNumbers = new HashSet<Integer>(capacity); 
     Random r = new Random(); 

     do { 
      int next = r.nextInt(50); 
      if (!generateLotteryNumbers.contains(r.nextInt(50))) { 
       generateLotteryNumbers.add(next); 
       capacity--; 

      } 
     } while (capacity > 0); 
     generateLotteryNumbers.stream().forEach(n -> System.out.println(n)); 
    } 
} 

但问题的真正根源在于r.nextInt(50)的重复使用。第二次电话不太可能产生相同的号码。它应该是这样的......

int next = r.nextInt(50); 
if (!generateLotteryNumbers.contains(next)) { 

为AFSW指出,一个替代办法是使用来自add()方法返回的布尔

if (generateLotteryNumbers.add(r.nextInt(50))) { 
    capacity--; 
} 

我的替代办法是,不要试图要自己维护容量,只需使用内置的size()方法。因此,

do { 
    generateLotteryNumbers.add(r.nextInt(50)); 
} while (generateLotteryNumbers.size() < capacity); 
+0

代码中存在一个小问题。你创建一个随机数'next',然后检查另一个随机数是否包含在set'generateLotteryNumbers'中。 – AKSW

+1

谢谢这是我刚刚发现和修复的原始问题... – Adam

+2

人们总是忘记'add'返回一个布尔值...显而易见的方法是编写'if(generateLotteryNumbers.add(r.nextInt( 50)){ capacity--; }' – AKSW