2017-10-15 91 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