2013-05-17 47 views
1

我對Java比較陌生,想嘗試創建一個代碼,它可以隨機生成2個數字一定的次數,並且它會跟蹤2個數字相同的次數。然後,在X次嘗試之後,它會計算出發生的機會。試圖創建機會計算器

#隨機量的時間除以它們是相同

import java.util.Random; 

public class RandomTest { 
    public static void main(String[] args) { 
     int[] anArray; 
    anArray = new int[100000]; 
    Random randomGenerator = new Random(); 
    for (int loop = 1; loop < 1000; loop++) { 
     int random1 = randomGenerator.nextInt(100); 
     int random2 = randomGenerator.nextInt(100); 
     if (random1 == random2) { 
      int number = number + 1; 
      countArray[number] = loop; 
     } 
     if (loop == 1000) { 
      System.out.println("Took " + loop + " randoms."); 
      break; 
     } 
     else {} 
     } 
    } 
} 

主要問題似乎是越來越陣列填寫和輸入/輸出循環中得到整數。

+0

如果您更明智地縮進,您會發現按照自己的代碼更容易。爲什麼你有一個空的'if'塊?你預計什麼時候'循環'在循環*內是1000 *? –

+0

你需要什麼陣列?是否查看兩個號碼組的匹配頻率('54 22'與'54 22'匹配)還是兩次匹配的頻率('22 22')? –

+0

其實**循環**永遠不會是1000 –

回答

0

你可能想做點什麼行:進入則循環遞增數與

number = number + 1; 

int number = number + 1; 

要逐步通過陣列,設置數量爲零

int number = 0; 

+0

雖然對於任何已經完成一些(Java)編程的人來說,這個錯誤是顯而易見的,但如果您要指定**,那麼應該對該行做些什麼**,這對初學者可能會更有幫助。優勢並不令人滿意。 – adrianp

+0

我並非想要成爲優秀的人,而是在努力不去光顧。我認爲這是一個錯字,而不是誤解。 – parkydr

4

這是我的版本的代碼:

import java.util.Random; 
import java.util.ArrayList; 

public class RandomTest { 
    public static void main(String[] args) { 
     ArrayList<Integer> duplicates = new ArrayList<Integer>(); 
     int random1 = 0, random2 = 0; 
     Random randomGenerator = new Random(); 
     for (int loop = 1; loop <= 1000; loop++) { 
      random1 = randomGenerator.nextInt(100); 
      random2 = randomGenerator.nextInt(100); 
      if (random1 == random2) { 
       duplicates.add(new Integer(random1)); 
      } 
     } 

     for (Integer i : duplicates) { 
      System.out.println("Duplicate: "+i.toString()); 
     } 
    } 
} 

有許多的問題,您的解決方案包含:

int number = number + 1; 

以上將創建新的int被叫號碼,並給它null值+ 1,這是因爲上面可以分割分成2行:

int num; 
num = num + 1; 

第一行將爲名爲num的變量保留存儲空間。第二行將嘗試將(num + 1)的值放入num中。當我們調用num並且它沒有被初始化 - 這會給我們一個java.lang.Error(至少這是我得到的)。

因此,大家可以看到,把號外for循環和初始化像這樣:

int number = 0; 
for (int loop = 1; loop <= 1000; loop++) { 
    number = number + 1; 
} 

將由1,999次增加數的值。

這將我帶到下一點。 for循環永遠不會使循環= 1000,因爲條件將在條件爲真之前停止循環,因此當for循環結束時,循環將等於999.如果您希望循環在循環= 1000時結束,則應使用loop <= 1000。此外,if條件不是必需的,因爲循環結束時它將繼續執行下面的其餘代碼。

我沒有在我的解決方案中使用number可言,這是因爲我使用了一個ArrayList,這基本上是一個更高級版本的陣列,可以動態增加和做其他很酷的東西負載。不幸的是,ArrayLists需要包含對象,所以我把每個int包裝在一個Integer對象中,這很好。最後,我使用for循環遍歷重複列表,爲每個結果打印出來。

希望這會有所幫助,如果您有任何問題,請隨時評論。

+0

非常感謝,這真棒。 將通過並閱讀所有你提到的東西。 – user2393883

+0

如果你喜歡我的回答,請接受它作爲問題的正式答案。 – Rossiar