看板 java 關於我們 聯絡資訊
小弟我對於樂透機率小有疑問 於是寫了個簡單的程式來跑一下 但不管怎麼跑總是搭不起來 我的問題如下 樂透49個號碼,我只簽2個號碼 要求出 2中0 2中1 2中2 三種狀況的機率 自己直接用公式算完的機率分別是 2中0 = 0.767857143 2中1 = 0.219387755 2中2 = 0.012755102 但是我自己寫了程式下去跑 機率總和永遠大於1 雖然誤差一定會有 但是這怎麼看都不太像是誤差QQ 想請各位前輩幫忙看看是否程式寫錯或是邏輯觀念錯誤 ------------------------------------------ int count = 10000000; //跑一千萬次 int winOne = 0; int winAll = 0; int noWin = 0; ArrayList<Integer> numList; ArrayList<Integer> myNumList; for (int i = 0; i < count; i++) { numList = new ArrayList<>(); myNumList = new ArrayList<>(); //產生一組樂透號碼,6個數字 for (int n = 0; numList.size() < 6; n++) { int num = (int) (Math.random() * 49 + 1); if (!numList.contains(num)) { numList.add(num); } } //產生一組我的號碼,2個數字 for (int n = 0; myNumList.size() < 2; n++) { int num = (int) (Math.random() * 49 + 1); if (!myNumList.contains(num)) { myNumList.add(num); } } //檢查中獎 if (numList.contains(myNumList.get(0)) || numList.contains(myNumList.get(1))) { winOne += 1; } else { noWin += 1; } if (numList.contains(myNumList.get(0)) && numList.contains(myNumList.get(1))) { winAll += 1; } } System.out.println("二中零機率 = " + (double) noWin / count ); System.out.println("二中一機率 = " + (double) winOne / count ); System.out.println("二中二機率 = " + (double) winAll / count ); System.out.println("加總 = " + (double) (noWin+winOne+winAll ) / count ); ------------------------ 本來想說自己看懂就好 所以程式寫得滿簡陋的請各位多多包涵 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.141.198.211 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1525678235.A.9AA.html
marx93521: winOne跟winAll是不是重複計算到了? 05/07 15:39
jej: 看到double就要小心IEEE的限定 05/07 19:50
wemee: IEEE 754 我中招很多次 05/08 12:29
FromTo: 二中一的判斷式有誤,會包含二中二。包含A(B)&&不包含B(A) 05/08 14:35
nicknick0630: 你檢查中獎的第一行不對 (A||B) A是true就不會管B 05/08 18:44
nicknick0630: 是怎樣了 05/08 18:44
taco2548: 但我2中2是另外寫if,並不是寫else if,,這樣也不行嗎? 05/08 21:01
nicknick0630: 如果你get(0)和get(1)都是true 05/09 01:36
nicknick0630: 他就會直接執行winOne++ 05/09 01:36
nicknick0630: 然後到下面又winAll++一次 05/09 01:36
nicknick0630: 所以你第一個if判斷的地方出錯了 05/09 01:36
感謝,問題已解,還是乖乖寫else if寫好寫滿QQ ※ 編輯: taco2548 (223.141.198.211), 05/09/2018 08:01:08
ssccg: 就是因為另外寫if才會錯啊 05/09 13:09
ssccg: A and B就已經包含在A or B裡面了 05/09 13:09
ssccg: 只寫if 不用else的話,每個條件都必須不會互相包含 05/09 13:11
ssccg: 寫if else if 要由不包含其他條件的依序放寬 05/09 13:12
ssccg: 邏輯觀念的問題比較大 05/09 13:13
gmoz: 你需要先知道一下if()裡面是怎麼運作的 05/09 16:30