2013-04-24 197 views
0

我想創建一個程序來生成隨機數並存儲到arraylist。 同時獲取存儲的號碼multiply隨機數存儲在數組列表中,並從中選擇

我有存儲生成的號碼,但我怎麼才能真正得到我想要的號碼。 對於這個例子,我試圖得到3rd number,我錯過了哪一步?

public class arraylist { 

    public static void main(String[] args) { 

     List<Integer> list = new ArrayList<Integer>(); 
     Random rand = new Random(); 

     int numtogen; 
     int third; 
     Scanner scan = new Scanner(System.in); 
     System.out.println("How many number do you want to generate: "); 
     numtogen = scan.nextInt(); 
     System.out.println("What number do you want to multiply with the third number: "); 
     third = scan.nextInt(); 

     HashSet<Integer> generated = new HashSet<Integer>(); 

     // Prevent repeat 
     for (int x = 1; x <= numtogen; ++x) { 
      while (true) { 
       // generate a range from 0-100 
       int ranNum = rand.nextInt(100); 

       if (generated.contains(ranNum)) { 

        continue; 
       } else { 
        list.add(ranNum); 
        System.out.println("Number " + x + "=" + " = " + ranNum); 
        break; 
       } 

      } 

     } 
     int numinlist; 
     while (!list.isEmpty()) { 

      // Integer[] numlist= numbinlist.hasNextInt; 

      // int answer = numlist[2]*third; 
      // System.out.println("Answer to first number = "+answer); 
     } 
    } 

} 
+1

你想做什麼是相當不清楚。 – Zyerah 2013-04-24 07:04:08

+0

第三個隨機數只是一個隨機數。 List或Set是多餘的,所以你可以做'int triple = rand.nextInt(100)* 3;'不管它們輸入什麼(我假設這只是一個練習;) – 2013-04-24 07:04:40

回答

3

你可以不重複數字的生成更改爲:

Set<Integer> generated = new LinkedHashSet<Integer>(); 
// Prevent repeat 
while (generated.size() < numtogen) { 
    generated.add(rand.nextInt(100)); 
} 
List<Integer> list = new ArrayList<Integer>(generated); 

我瞭解你的實際問題,並知道答案,我會盡快修改這個答案。

+0

優化好的代碼! 。 newbieprogrammer你不需要使用無限while循環並打破它。 – 2013-04-24 07:05:07

+0

+1使用'Set'進行優化優化# – Stephan 2013-04-24 07:07:52

+0

感謝編碼較短= D – newbieprogrammer 2013-04-24 07:20:18

3

如果你想獲得第三生成的數字試試這個:

int number = list.get(2); 
+2

第三個數字實際上是'list.get(2);' – jlordo 2013-04-24 07:03:36

+1

+1似乎是一個很好的猜測。無論如何,這個問題需要編輯。哦,修復索引,請 – Jayan 2013-04-24 07:03:45

+0

@jlordo是啊我們的權利,因爲它從0開始,thx隊友 – Stephan 2013-04-24 07:04:22

1

改變這一點:

for (int x = 1; x <= numtogen; ++x) { 
    while (true) { 
     // generate a range from 0-100 
     int ranNum = rand.nextInt(100); 

     if (generated.contains(ranNum)) { 

      continue; 
     } else { 
      list.add(ranNum); 
      System.out.println("Number " + x + "=" + " = " + ranNum); 
      break; 
     } 
    } 
} 

到:

for (int x = 1; x <= numtogen; ++x) { 
    // generate a range from 0-100 
    int ranNum = rand.nextInt(100); 
    if (generated.contains(ranNum)) { 
     continue; 
    } else { 
     list.add(ranNum); 
     System.out.println("Number " + x + "=" + " = " + ranNum); 
    } 
} 

然後,所有你需要做的訪問第三個號碼是這樣的:

int answer = (list.get(2) * third);