[英](Java) Using nested loops
我的分配指令是“擲出” 2個骰子並獲取總和,然后根據用戶希望擲出骰子的次數找到該總和的概率。 我必須使用嵌套循環,並且不能對每個骰子組合使用單獨的循環(尚未完成)。 我不允許在此作業中使用數組。
編寫一個程序來模擬擲一對11面骰子,並確定擲骰子的每種可能組合的次數百分比。
- 在Mod05 Assignments文件夾中創建一個名為5.05 Random Dice的新項目。
- 在新創建的項目文件夾中創建一個名為DiceProbability的類。
- 要求用戶輸入擲骰子的次數。
- 計算每種骰子組合的概率。 (您可能想從更熟悉的六面骰子開始。)
- 分兩列整齊地打印結果
我需要幫助找出我放入第二個“ 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.