簡體   English   中英

(Java)使用嵌套循環

[英](Java) Using nested loops

我的分配指令是“擲出” 2個骰子並獲取總和,然后根據用戶希望擲出骰子的次數找到該總和的概率。 我必須使用嵌套循環,並且不能對每個骰子組合使用單獨的循環(尚未完成)。 我不允許在此作業中使用數組。

編寫一個程序來模擬擲一對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 + "%");
}
}

我認為您需要使用二維數組,如下所示:

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);
  }

我對您的代碼有一些評論。

根據指令,您總結出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));
    }
 }
}

我同意@Thinhbk的觀點,該問題在技術上用組合而不是總和來表達,但鏈接中的圖片顯示總和,因此我認為總和是意圖。 您編寫的組合方法令人印象深刻,但是對於Java入門課程來說太先進了。 我喜歡圖片顯示IDE是BlueJ的方式。 帶我回來。 無論如何,賦值描述沒有指定內部for循環的需要。 我看到@ user1713336的編輯,即在您可以添加(user1713336)的第一個循環之前,不允許使用其他數組:

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

您的整個內部for循環可以替換為:

count[actualDiceSum]++;

然后在for循環中打印時,打印count[i]/rolls*100並從int i開始,該值應為2,這是最低值。 我懷疑您接下來將學習數組,因此我想展示如何完成。

由於不能使用數組,因此countx = 0; 線條很好。 不要實時計算概率。 它是不必要的,並添加了許多行代碼,只需跟蹤每個值的滾動次數即可,因此:

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

請注意,如果僅一行代碼與if或while語句綁定在一起,則無需使用{} ,如圖所示。 然后以與以前相同的方式進行打印, count2/rolls*100 (乘以100,因為圖片顯示的是百分比,而不是比率)。

根據我的說法,您不需要第二循環。 每次擲骰子時,您都要計算總和,並根據總和增加計數。

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

例如

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...
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM