2013-12-13 51 views
0

當我們嘗試創建賓果程序時,我們陷入困境。我們是業餘編程人員,我們可以用數字輸出隨機值,但是當我們輸出這些數字時,它會打印所有數字。有沒有辦法一次打印一個數字,而不重複,同時跟蹤已打印的數字?如何使用具有循環的數組列表中的collections.shuffle一次打印出一個值?

import java.util.ArrayList; 

import java.util.Random; 

public class RandonNumberGenerator { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     ArrayList<Integer> RandomNumsList = new ArrayList<Integer>(); 
     RandomNumsList.add(1); 

     ... //we added index numbers 1-75, but we didn't want to take up too much 
        //space so we put this space to replace 2-74 

       RandomNumsList.add(75); 

     Collections.shuffle(RandomNumsList); 
     String letter; 
     int index; 
     for (index = 0; index<RandomNumsList.size(); index++) 
     { 
      int x=0; 
      x=RandomNumsList.get(index); 
      if (x>0 && x<=15) 
      { 
       letter=("B"); 
      System.out.println (letter+x); 

      } 
      if (x>15 && x<=30) 
      { 
       letter=("I"); 
       System.out.println (letter+x); 
      } 
      if (x>30 && x<=45) 
      { 
       letter=("N"); 
       System.out.println (letter+x); 
      } 
      if (x>45 && x<=60) 
      { 
       letter=("G"); 
       System.out.println (letter+x); 
      } 
      if (x>60 && x<=75) 
      { 
       letter=("O"); 
       System.out.println (letter+x); 
      }    
     }  
    }  
} 
+0

你可以添加一個新的集合與被調用的數字進行跟蹤(以及稍後的賓果驗證),並將它放入新集合後將原始數字從您的隨機集合中刪除 –

回答

0

這裏有一個問題:

ArrayList<Integer> RandomNumsList = new ArrayList<Integer>(); 
RandomNumsList.add(1); 

//we added index numbers 1-75, but we didn't want to take up too much 
//space so we put this space to replace 2-74 

RandomNumsList.add(75); 

修復用一個初始化號碼循環:

ArrayList<Integer> RandomNumsList = new ArrayList<Integer>(); 
for (int i = 1; i <=75; i++) { 
    RandomNumsList.add(i); 
} 

現在,讓您的打印循環中檢查與掃描儀和ADD已經使用數字到數組列表。按下輸入的下一個號碼:

Collections.shuffle(RandomNumsList); 
    Scanner scan = new Scanner(System.in); 
    ArrayList<Integer> numsAlreadyUsed = new ArrayList<Integer>(); 
    String letter; 
    int index; 
    for (index = 0; index<RandomNumsList.size(); index++) { 
     System.out.println("Press enter for the next number!"); 
     scan.nextLine() 
     int x=RandomNumsList.get(index); 
     numsAlreadyUsed.add(x); 

     if (x>0 && x<=15) { 
      letter=("B"); 
     } else if (x>15 && x<=30) { 
      letter=("I"); 
     } else if (x>30 && x<=45) { 
      letter=("N"); 
     }else if (x>45 && x<=60) { 
      letter=("G"); 
     }else if (x>60 && x<=75) { 
      letter=("O"); 
     } 
     // no need to repeat this line in every branch of the if statement! 
     System.out.println (letter+x); 
    } 

或者,索引下的原始數組列表中的任何數字已被使用。

+0

謝謝!你是一個救星! – user3092008

0

如何:

一開始,我已經簡化添加數字到列表中爲您服務。 然後,當它通過字母列表時,當我匹配時,它存儲該字母,並從列表中刪除該數字。它只會匹配一次字母,一旦匹配每個字母一次就會停止。

public static void main(String[] args) { 
    ArrayList<Integer> RandomNumsList = new ArrayList<Integer>(); 
    for (int i = 1; i <= 75; i++) { 
     RandomNumsList.add(i); 
    } 

    Collections.shuffle(RandomNumsList); 
    String letters = ""; 

    while (RandomNumsList.size() > 0 && letters.length() < 5) { 
     int x = 0; 
     x = RandomNumsList.get(0); 
     if (x > 0 && x <= 15 && !letters.contains("B")) { 
      letters += ("B"); 
      System.out.println(letters + x); 
     } else if (x > 15 && x <= 30 && !letters.contains("I")) { 
      letters += ("I"); 
      System.out.println(letters + x); 
     } else if (x > 30 && x <= 45 && !letters.contains("N")) { 
      letters += ("N"); 
      System.out.println(letters + x); 
     } else if (x > 45 && x <= 60 && !letters.contains("G")) { 
      letters += ("G"); 
      System.out.println(letters + x); 
     } else if (x > 60 && x <= 75 && !letters.contains("O")) { 
      letters += ("O"); 
      System.out.println(letters + x); 
     } else { 
      System.out.println(x); 
     } 
     RandomNumsList.remove(0); 
    } 

} 
+0

我不認爲他試圖獲取字符串「答對了。」在我看來,他正在試圖創建一個發電機來模擬採摘賓果球。 – turbo

+0

感謝您的幫助! – user3092008

+0

如果我走得太遠,讓我知道,我可以去掉一些額外的位。正試圖根據現有的代碼猜測你想要它做什麼。 – M21B8

相關問題