2012-10-12 220 views
1

我的assignment instructions是「滾動」2個骰子並獲得總和,然後根據用戶想要擲骰子的次數找出總和出現的概率。我必須使用嵌套循環,並且我不能爲每個骰子組合使用單獨的循環(我沒有這樣做)。我不能在這個任務中使用數組。(Java)使用嵌套循環

編寫一個程序來模擬拋擲一對11面骰子,並確定每個可能的骰子組合擲骰子的百分比。

  1. 在Mod05 Assignments文件夾中創建一個名爲5.05 Random Dice的新項目。
  2. 在新創建的項目文件夾中創建一個名爲DiceProbability的類。
  3. 要求用戶輸入擲骰子的次數。
  4. 計算每個骰子組合的概率。 (您可能要開始更熟悉的六面骰子。)
  5. 打印結果整齊的兩列

我需要找出什麼,我投入的第二個「for」循環的幫助。對不起,雜亂的整數列表和if語句。代碼未完成。

import java.util.Random; 
import java.util.Scanner; 
public class DiceProbability 
{ 
public static void main(String[] args) 
{ 
    Scanner in = new Scanner(System.in); 
    Random randNum = new Random(); 

    int count2 = 0; 
    int count3 = 0; 
    int count4 = 0; 
    int count5 = 0; 
    int count6 = 0; 
    int count7 = 0; 
    int count8 = 0; 
    int count9 = 0; 
    int count10 = 0; 
    int count11= 0; 
    int count12= 0; 
    int count13 = 0; 
    int count14 = 0; 
    int count15 = 0; 
    int count16 = 0; 
    int count17 = 0; 
    int count18 = 0; 
    int count19 = 0; 
    int count20 = 0; 
    int count21 = 0; 
    int count22 = 0; 
    int die1 = 0, die2 = 0; 
    int rolls = 0; 
    int actualDiceSum; 
    double probabilityOfDice = 0.0; 

    System.out.print("Number of Rolls: "); 
    rolls = in.nextInt(); 

    for(int timesRolled = 0; timesRolled < rolls; timesRolled++) 
     { 
     die1 = randNum.nextInt(12); 
     die2 = randNum.nextInt(12); 
     actualDiceSum = die1 + die2; 
     for() 
     { 
      if(actualDiceSum == 2){ 
      count2++; 
      probabilityOfDice = count2/rolls; 
      } 
      else if(actualDiceSum == 3){ 
      count3++; 
      probabilityOfDice = count3/rolls; 
      } 
      else if(actualDiceSum == 4){ 
      count4++; 
      probabilityOfDice = count4/rolls; 
      } 
      else if(actualDiceSum == 5){ 
      count5++; 
      probabilityOfDice = count5/rolls; 
      } 
      else if(actualDiceSum == 6){ 
      count6++; 
      probabilityOfDice = count6/rolls; 
      } 
      else if(actualDiceSum == 7){ 
      count7++; 
      probabilityOfDice = count7/rolls; 
      } 
      else if(actualDiceSum == 8){ 
      count8++; 
      probabilityOfDice = count8/rolls; 
      } 
      else if(actualDiceSum == 9){ 
      count9++; 
      probabilityOfDice = count9/rolls; 
      } 
      else if(actualDiceSum == 10){ 
      count10++; 
      probabilityOfDice = count10/rolls; 
      } 
      else if(actualDiceSum == 11){ 
      count11++; 
      probabilityOfDice = count11/rolls; 
      } 
      else if(actualDiceSum == 12){ 
      count12++; 
      probabilityOfDice = count12/rolls; 
      } 
      else if(actualDiceSum == 13){ 
      count13++; 
      probabilityOfDice = count13/rolls; 
      } 
      else if(actualDiceSum == 14){ 
      count14++; 
      probabilityOfDice = count14/rolls; 
      } 
      else if(actualDiceSum == 15){ 
      count15++; 
      probabilityOfDice = count15/rolls; 
      } 
      else if(actualDiceSum == 16){ 
      count16++; 
      probabilityOfDice = count16/rolls; 
      } 
      else if(actualDiceSum == 17){ 
      count17++; 
      probabilityOfDice = count17/rolls; 
      } 
      else if(actualDiceSum == 18){ 
      count18++; 
      probabilityOfDice = count18/rolls; 
      } 
      else if(actualDiceSum == 19){ 
      count19++; 
      probabilityOfDice = count19/rolls; 
      } 
      else if(actualDiceSum == 20){ 
      count20++; 
      probabilityOfDice = count20/rolls; 
      } 
      else if(actualDiceSum == 21){ 
      count21++; 
      probabilityOfDice = count21/rolls; 
      } 
      else if(actualDiceSum == 22){ 
      count22++; 
      probabilityOfDice = count22/rolls; 
      } 
     } 
    } 


    System.out.println("Sum of Dice \t\t Probability"); 
    System.out.println("2's\t\t" + probabilityOfDice + "%"); 
    System.out.println("3's\t\t" + probabilityOfDice + "%"); 
    System.out.println("4's\t\t" + probabilityOfDice + "%"); 
    System.out.println("5's\t\t" + probabilityOfDice + "%"); 
    System.out.println("6's\t\t" + probabilityOfDice + "%"); 
    System.out.println("7's\t\t" + probabilityOfDice + "%"); 
    System.out.println("8's\t\t" + probabilityOfDice + "%"); 
    System.out.println("9's\t\t" + probabilityOfDice + "%"); 
    System.out.println("10's\t\t" + probabilityOfDice + "%"); 
    System.out.println("11's\t\t" + probabilityOfDice + "%"); 
    System.out.println("12's\t\t" + probabilityOfDice + "%"); 
    System.out.println("13's\t\t" + probabilityOfDice + "%"); 
    System.out.println("14's\t\t" + probabilityOfDice + "%"); 
    System.out.println("15's\t\t" + probabilityOfDice + "%"); 
    System.out.println("16's\t\t" + probabilityOfDice + "%"); 
    System.out.println("17's\t\t" + probabilityOfDice + "%"); 
    System.out.println("18's\t\t" + probabilityOfDice + "%"); 
    System.out.println("19's\t\t" + probabilityOfDice + "%"); 
    System.out.println("20's\t\t" + probabilityOfDice + "%"); 
    System.out.println("21's\t\t" + probabilityOfDice + "%"); 
    System.out.println("22's\t\t" + probabilityOfDice + "%"); 
} 
} 
+1

究竟做你的代碼做的,你在哪裏打破你的內心'for'循環?看起來它永遠都是。另外,在這種情況下,使用'switch ... case'語句而不是'if ... else if ... else'階梯將更合適。 – Lion

+1

@Lion我只是想說。另外,你應該真的使用某種類型的數組系統或其他東西。所有這些計數變量都很瘋狂。 – Austin

+0

說明:編寫一個程序來模擬拋擲一對11面骰子,並確定擲骰子每個可能組合的次數百分比。 1.在Mod05 Assignments文件夾中創建一個名爲5.05 Random Dice的新項目。 2.在新創建的項目 文件夾中創建一個名爲DiceProbability的類。 3.要求用戶輸入擲骰子的次數。 4.計算每個骰子組合的概率。 (你可能想從 更熟悉的六面骰子開始。) 5.將結果整齊排列在兩列 – user1713336

回答

0

那麼根據我你不需要第二個循環。 每次擲骰子時,都要計算總數並根據總和增加計數。

您需要使用單獨的變量來計算每個總和的概率。

例如

Probability of count2 = (count2/number of rolls); 
Probability of count3 = (count2/number of rolls); 

使用計數

的概率不同的變量試試這個代碼

import java.util.Random; 
import java.util.Scanner; 
public class DiceProbability 
{ 
public static void main(String[] args) 
{ 
    Scanner in = new Scanner(System.in); 
    Random randNum = new Random(); 
int count2 = 0; 
int count3 = 0; 
int count4 = 0; 
int count5 = 0; 
int count6 = 0; 
int count7 = 0; 
int count8 = 0; 
int count9 = 0; 
int count10 = 0; 
int count11= 0; 
int count12= 0; 
int count13 = 0; 
int count14 = 0; 
int count15 = 0; 
int count16 = 0; 
int count17 = 0; 
int count18 = 0; 
int count19 = 0; 
int count20 = 0; 
int count21 = 0; 
int count22 = 0; 
int die1 = 0, die2 = 0; 
int rolls = 0; 
int actualDiceSum; 
double probabilityOfDice = 0.0; 

System.out.print("Number of Rolls: "); 
rolls = in.nextInt(); 

for(int timesRolled = 0; timesRolled < rolls; timesRolled++) 
    { 
    die1 = randNum.nextInt(12); 
    die2 = randNum.nextInt(12); 
    actualDiceSum = die1 + die2; 

     if(actualDiceSum == 2){ 
     count2++; 

     } 
     else if(actualDiceSum == 3){ 
     count3++; 

     } 
     else if(actualDiceSum == 4){ 
     count4++; 

     } 
     else if(actualDiceSum == 5){ 
     count5++; 

     } 
     else if(actualDiceSum == 6){ 
     count6++; 

     } 
     else if(actualDiceSum == 7){ 
     count7++; 

     } 
     else if(actualDiceSum == 8){ 
     count8++; 

     } 
     else if(actualDiceSum == 9){ 
     count9++; 

     } 
     else if(actualDiceSum == 10){ 
     count10++; 

     } 
     else if(actualDiceSum == 11){ 
     count11++; 

     } 
     else if(actualDiceSum == 12){ 
     count12++; 

     } 
     else if(actualDiceSum == 13){ 
     count13++; 

     } 
     else if(actualDiceSum == 14){ 
     count14++; 

     } 
     else if(actualDiceSum == 15){ 
     count15++; 

     } 
     else if(actualDiceSum == 16){ 
     count16++; 

     } 
     else if(actualDiceSum == 17){ 
     count17++; 

     } 
     else if(actualDiceSum == 18){ 
     count18++; 

     } 
     else if(actualDiceSum == 19){ 
     count19++; 

     } 
     else if(actualDiceSum == 20){ 
     count20++; 

     } 
     else if(actualDiceSum == 21){ 
     count21++; 

     } 
     else if(actualDiceSum == 22){ 
     count22++; 

     } 
    } 
} 


System.out.println("Sum of Dice \t\t Probability"); 
System.out.println("2's\t\t" + count2/rolls + "%"); 
System.out.println("3's\t\t" + count3/rolls + "%"); 
System.out.println("4's\t\t" + count4/rolls + "%"); 
System.out.println("5's\t\t" + count5/rolls + "%"); 
//and so on... 
} 
} 
0

我認爲你需要使用二維數組如下:

int rolls = 0; 
System.out.print("Number of Rolls: "); 
rolls = in.nextInt(); 

int[][] numAndOccuranceCount= new int[11][2]; //sum will be between 2 -12 

//initialize your array 
for(int indx=0; indx<11;indx++){ 
    numAndOccuranceCount[indx] = new int[]{indx+2,0); 
} 

for(int timesRolled = 0; timesRolled < rolls; timesRolled++){ 
    die1 = randNum.nextInt(12); 
    die2 = randNum.nextInt(12); 
    actualDiceSum = die1 + die2; 

    for(int indx=0; indx<11;indx++){ 
     if(actualDiceSum == numAndOccuranceCount[i][0]){ 
      numAndOccuranceCount[indx][1] = numAndOccuranceCount[indx][1]+1; 
      break; 
     } 
    } 
} 

double proabability = 0.0; 
//compute and print the probablity as below: 
    for(int indx=0; indx<11;indx++){ 
    proabability = numAndOccuranceCount[indx][1]/rolls; 
    System.out.println("Probability of "+ numAndOccuranceCount[indx][0] +" = "+proabability); 
    } 
+0

不幸的是,我不允許在代碼中使用數組。謝謝,不過。 – user1713336

+0

非常感謝您花時間幫助我! – user1713336

+0

您是否需要僅使用變量,if-else和for循環,還是可以使用其他集合對象(如List或Map)?用'if-else',它變成只有一個循環。即使你想用一維數組代替二維數組,我們也可以很容易地寫出它。 –

0

我對你的代碼的一些評論。

根據說明,你總結了dice1和dice2不是正確的方法,因爲1 + 5 = 2 + 4 = 3 + 3,但它們是不同的。所以我們必須根據組合來計算可能性,而不是總和。

這裏是我的代碼:

DTO類:

public class DiceCombination { 
    private int dice1; 
    private int dice2; 

    public DiceCombination(int dice1, int dice2) { 
     this.dice1 = dice1; 
     this.dice2 = dice2; 
    } 
    /* (non-Javadoc) 
    * @see java.lang.Object#toString() 
    */ 
    @Override 
    public String toString() { 
     return "Combination of [dice " + dice1 + " and dice " + dice2 + "]"; 
    } 
    /* (non-Javadoc) 
    * @see java.lang.Object#hashCode() 
    */ 
    @Override 
    public int hashCode() { 
    final int prime = 31; 
    if(dice1 < dice2) { 
     return prime*dice1 + dice2; 
    } 
    else { 
     return prime*dice2 + dice1; 
    } 
} 
    /* (non-Javadoc) 
    * @see java.lang.Object#equals(java.lang.Object) 
    */ 
    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     DiceCombination other = (DiceCombination) obj; 
     if ((dice1 == other.dice1 && dice2 == other.dice2) || (dice1 == other.dice2 && dice2 == other.dice1)) 
      return true; 
     return false; 
    } 

} 

主要類:

public class Posibility { 

public static void main(String[] args) { 
    Map<DiceCombination,Integer> possibility = new HashMap<DiceCombination,Integer>(); 
    int dice1; 
    int dice2; 
    int roll = 400; // value here should be inputted from user, you may change any value you want 
    Random randNum = new Random(); 

    for(int i = 0; i < roll; i ++) { 
     dice1 = randNum.nextInt(12); 
     dice2 = randNum.nextInt(12); 
     DiceCombination dc = new DiceCombination(dice1, dice2); 
     if(possibility.containsKey(dc)) { 
      possibility.put(dc , possibility.get(dc) + 1); 
     } 
     else { 
      possibility.put(dc, 1); 
     } 
    } 
    for(DiceCombination key : possibility.keySet()) { 
     System.out.println("Result: " + key.toString() + " is " + ((double)possibility.get(key)/roll)); 
    } 
} 
} 
0

我@Thinhbk同意,問題是在組合方面技術上的措辭沒有資金,但在鏈接中的圖片顯示的總和,所以我相信總和的意圖。您所編寫的組合方法令人印象深刻,但對於看起來像Java的前奏課程而言,這種方法太高級了。我喜歡圖片顯示IDE是BlueJ。帶我回來。無論如何,賦值描述並沒有指定需要一個inner for循環。我看到@ user1713336的編輯,數組沒有別的之前允許你(user1713336的)第一循環中,您可以添加:

int[] count = new int[23]; 
//0 is the default value for each 
//int[22] is the 23rd value in the array 

什麼是你的整個內部的循環可能會被替換爲:

count[actualDiceSum]++; 

然後同時在for循環中打印,打印count[i]/rolls*100並在2開始int i,這是可能的最低值。我懷疑你會接下來學習陣列,所以我想展示它將如何完成。

既然你不能使用數組,你的countx = 0;行就好了。不要實時計算概率。這是不必要的和,並增加了很多行代碼,只是不停的次數記錄每個值捲起來:

if(actualDiceSum == 2) 
    count2++; 
else if(actualDiceSum == 3) 
    count3++; 
//etc 

請注意,您不需要使用{}如果只有一個行代碼綁如圖所示的if或while語句。然後按照以前的方式打印,count2/rolls*100(乘以100,因爲圖片顯示的是百分比,而不是比率)。