Нахождение вероятности с использованием вложенных циклов for в Java

Моя проблема в том, что всякий раз, когда я пытаюсь скомпилировать и запустить свою программу, она говорит, что одна из моих арифметических задач ближе к концу моего кода — деление на ноль. Теперь есть другая проблема. Всякий раз, когда пользователю предлагается ввести количество рулонов, вы можете ввести число и нажать Enter, но он просто переходит к следующей строке, и ничего не происходит. Больше ничего в коде не происходит.

* ПРИМЕЧАНИЕ *

Я не могу использовать массивы в этом задании, потому что это не рассматривается до следующего раздела.

Вот мое задание . Это то, что я должен делать. Я не могу понять, что здесь происходит не так. Моя математика кажется правильной, но что-то идет не так.

Короче говоря, мое задание требует, чтобы я нашел вероятность того, что два 11-гранных кубика будут «брошены» количество раз, которое вводит пользователь. Например:

Если пользователь скажет, что кости нужно бросить 100 раз, он выведет что-то вроде этого 2 с: (вставьте вероятность того, что сумма двух костей равна 2 после 100 бросков) 3 с: (вставьте вероятность того, что сумма 2 кости равны 3 после 100 бросков) 4s: (указать вероятность того, что сумма 2 игральных костей равна 4 после 100 бросков) 5s: (указать вероятность того, что сумма 2 игральных костей равна 5 после 100 бросков)

и так далее.

Вот мой код:

public static void main(String[] args)

{

    //Declare and initialize variables and objects

    Scanner in = new Scanner(System.in);

    Random randNum = new Random();




    int match = 0; //Number of times sum of dice matches the current sum

    int die1 = 0; //Random generated numbers
    int die2 = 0;
    int diceTotal2 = 0;
    int diceTotal3 = 0;
    int diceTotal4 = 0;
    int diceTotal5 = 0;
    int diceTotal6 = 0;
    int diceTotal7 = 0;
    int diceTotal8 = 0;
    int diceTotal9 = 0;
    int diceTotal10 = 0;
    int diceTotal11 = 0;
    int diceTotal12 = 0;

    int sumOfDice = 0;
    double probability2 = 0.0;
    double probability3 = 0.0;
    double probability4 = 0.0;
    double probability5 = 0.0;
    double probability6 = 0.0;
    double probability7 = 0.0;
    double probability8 = 0.0;
    double probability9 = 0.0;
    double probability10 = 0.0;
    double probability11 = 0.0;
    double probability12 = 0.0;


    //Input: ask user for number of rolls and number of sides on a die

    System.out.println("Number of Rolls: ");

    int rolls = in.nextInt();

    //***************************************************************************************

    //Using nested loops, cycle through the possible sums of the dice.

    //Roll the dice the given number of times for each sum.

    //Count how many times the sum of the dice match the current sum being looked for.

    //***************************************************************************************


    //Loop to increment through the possible sums of the dice

        //Loop to throw dice given number of times

        for( int numberOfRolls = 1; numberOfRolls < rolls; numberOfRolls++)

        {
              die1 = randNum.nextInt(6);
              die2 = randNum.nextInt(6);
              sumOfDice = die1 + die2;
              for( ; ; )
              {

            //Check if the sum of dice is equal to the given sum
                if(sumOfDice == 2)

                {
                    diceTotal2++;
                    probability2 = diceTotal2 / numberOfRolls;
                }

                else if(sumOfDice ==3)
                {
                    diceTotal3++;
                    probability3 = diceTotal3 / numberOfRolls;
                }

                else if(sumOfDice ==4)
                {
                    diceTotal4++;
                    probability4 = diceTotal4 / numberOfRolls;
                }

                else if(sumOfDice ==5)
                {
                    diceTotal5++;
                    probability5 = diceTotal5 / numberOfRolls;
                }

                else if(sumOfDice ==6)
                {
                    diceTotal6++;
                    probability6 = diceTotal6 / numberOfRolls;
                }

                else if(sumOfDice ==7)
                {
                    diceTotal7++;
                    probability7 = diceTotal7 / numberOfRolls;
                }

                else if(sumOfDice ==8)
                {
                    diceTotal8++;
                    probability8 = diceTotal8 / numberOfRolls;
                }

                else if(sumOfDice ==9)
                {
                    diceTotal9++;
                    probability9 = diceTotal9 / numberOfRolls;
                }

                else if(sumOfDice ==10)
                {
                    diceTotal10++;
                    probability10 = diceTotal10 / numberOfRolls;
                }

                else if(sumOfDice ==11)
                {
                    diceTotal11++;
                    probability11 = diceTotal11 / numberOfRolls;
                }

                else if(sumOfDice ==12)
                {
                    diceTotal12++;
                    probability12 = diceTotal12 / numberOfRolls;
                }

            }                

        }



       System.out.println("Sum of Dice" + "         " + "Probability");
       System.out.println("2s: \t\t" + probability2 + "%");
       System.out.println("3s: \t\t" + probability3 + "%");
       System.out.println("4s: \t\t" + probability4 + "%");
       System.out.println("5s: \t\t" + probability5 + "%");
       System.out.println("6s: \t\t" + probability6 + "%");
       System.out.println("7s: \t\t" + probability7 + "%");
       System.out.println("8s: \t\t" + probability8 + "%");
       System.out.println("9s: \t\t" + probability9 + "%");
       System.out.println("10s: \t\t" + probability10 + "%");
       System.out.println("11s: \t\t" + probability11 + "%");
       System.out.println("12s: \t\t" + probability12 + "%");


        //After all throws, calculate percentage of throws that resulted in the given sum



} //end main

person user1745508    schedule 15.10.2012    source источник
comment
Примечание: ваш программатор был бы намного короче и его было бы легче читать, если бы вы использовали массивы...   -  person Stephen C    schedule 15.10.2012
comment
Не хочу придираться, но задание говорит 4. Calculate the probability of each combination of dice. [...]. Количество бросков не влияет на эту вероятность. Я думаю, что цедент хочет 4. Simulate the throws and display the percentages of each possible sum. [...].   -  person brimborium    schedule 15.10.2012
comment
Как мне это сделать? Что мне нужно изменить?   -  person user1745508    schedule 15.10.2012


Ответы (2)


Поскольку у вас уже есть решение, я бы представил вам другое:

import java.util.Random;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int nRolls = 100, nDice = 6; // default values

        Scanner in = new Scanner(System.in);
        System.out.print("Number of throws: ");
        nRolls = in.nextInt();
        System.out.print("Number of sides on the dices: ");
        nDice = in.nextInt();

        int minSum = 2, maxSum = 2 * nDice;
        int[] hist = new int[maxSum - minSum + 1];

        Random rand = new Random();
        for (int iter = 1; iter <= nRolls; iter++) {
            int throw1 = 1 + rand.nextInt(nDice), throw2 = 1 + rand.nextInt(nDice);
            int sum = throw1 + throw2;
            hist[sum - minSum]++;
        }

        System.out.println("Number of rolls: " + nRolls);
        System.out.println("Number of sides of the dice: " + nDice);
        System.out.println("Sum of Dice         Percentage");
        for (int i = 0; i < hist.length; i++) {
            System.out.println(String.format("   %2d                 %5.2f%%", i + minSum, hist[i] * 100.0 / nRolls));
            // System.out.println("   " + (i+minSum) + "             " + (hist[i]*100.0/nRolls);
        }

        in.close();
    }
}

Он показывает вам, как использовать массивы для решения этой задачи. Каждая запись в массиве содержит количество бросков, которые привели к соответствующей сумме. У вас всегда есть 2*nDice - 1 возможных сумм (вы не можете достичь 1 двумя кубиками), поэтому размер массива зависит от количества сторон на кубике.

Затем вы просто перебираете все броски и добавляете 1 к соответствующей записи гистограммы (обратите внимание, что я смещаю гистограмму, поэтому hist[0] соответствует сумме 2, hist[1] сумме 3 и т. д.).

В конце можно просто рассчитать процент. (Это не вероятность, это процент того, что эта сумма возникла в нашей симуляции. Если вы увеличите количество бросков, этот процент будет приблизительным значением вероятности.)

В конце вы просто распечатываете его. Материал String.format предназначен только для выравнивания значений. Если вы смущены этим, просто используйте

System.out.println("   " + (i+minSum) + "             " + (hist[i]*100.0/nRolls);

вместо.

person brimborium    schedule 15.10.2012

Измените инициализацию numberOfRolls на 1 вместо 0.

for( int numberOfRolls = 1; numberOfRolls <= rolls; numberOfRolls++) {

Если numberOfRolls равно 0, все ваши операции деления приводят к делению на НОЛЬ.

probability2 = diceTotal2 / numberOfRolls;
person kosa    schedule 15.10.2012
comment
Теперь, когда пользователь вводит количество рулонов, он не исключает его. Если я нажму Enter в своем терминале после того, как ввел количество бросков, он просто перейдет к следующей строке, и я смогу продолжать вводить числа. Это не продвигается вперед в программе. - person user1745508; 15.10.2012
comment
Это целая отдельная тема. Я бы предложил обрезать код в вашем вопросе до строки, в которой у вас возникла проблема, и опубликовать как новый вопрос. - person kosa; 15.10.2012