Напишите программу, используя одномерные массивы со значениями из генератора случайных чисел, чтобы распечатать, сколько раз каждая комбинация была брошена парой кубиков. - PullRequest
0 голосов
/ 18 октября 2018

Целью назначения является использование параллельных 1-D массивов, но также допускаются 2-D.

Я могу распечатать различные комбинации, такие как 1,1 (иначе известные как змеиные глаза), брошенные парой костей.

Попытка распечатать количество раз, когда каждая комбинация была свернута, без печати комбинации, столько же раз она была свернута, затруднена.

Пример:

Введите количество раз, которое вы хотите бросить пару костей: 5

Вы бросили: 1 и 5 всего 1 раз -Чего я не хочу

Вы бросили: 4 и 3 в общей сложности 1 раз

Вы бросили: 1 и 5 в общей сложности 2 раза - Для дубликатов это все, что я хочу напечатать

Вы бросили: 3 и 3 всего 1 раз

Вы бросили: 2 и 2 всего 1 раз

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

Я считаю, что комбо [0] [0] - это количество раз, которое выпало 1,1, комбо [0] [1] - количество раз, когда выпало 1,2, и так далее.

import java.util.Scanner;

public class Dice {

Scanner read = new Scanner(System.in);
    Random diceRoll = new Random();
    int numRolls;
    int[] dice1 = new int [1000];
    int[] dice2 = new int [1000];
    int[][] combo = new int[6][6];


public void getRolls() 
{
    System.out.println("Enter the number of times you want to roll a pair of dice: ");
    numRolls = read.nextInt();

    dice1 = new int[numRolls];
    dice2 = new int[numRolls];

    for (int i = 0; i < dice1.length; i++)
    {
        dice1[i] = diceRoll.nextInt(6) + 1;
        dice2[i] = diceRoll.nextInt(6) + 1;
    }

    System.out.println("\n");



    for (int j = 0; j < combo.length; j++)
    {
        for (int k = 0; k < combo[0].length; k++)
        {
            combo[j][k] = 0;
        }
    }

   for (int m = 0; m < numRolls; m++)
    {
        combo[dice1[m] - 1][dice2[m] - 1]++;

        System.out.println("You rolled: " + dice1[m] + " and " + 
        dice2[m] + " a total of " + combo[dice1[m] - 1][dice2[m] - 1] + 
        " times");
    }

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Само-ответ:

Я сделал цикл печати отдельным от комбинированного цикла вычисления.Если комбинированное значение для комбинации равно 1, то я просто распечатываю его, заявляя, что оно было прокручено 1 раз.Если комбо-значение для комбинации было больше 1, я распечатываю его при первом появлении, заявляя, что оно выпало столько раз, а затем устанавливаю комбо-значение для этой комбинации равным 0. Только комбинации с хотя бы комбо-значением 1печатаются, поэтому дубликаты строк не могут быть напечатаны (т.е. 1,1 свернутых 4 раза печатает только одну строку вместо 4 отдельных строк).

    for (int m = 0; m < numRolls; m++)
    {
        combo[dice1[m] - 1][dice2[m] - 1]++;
    }

    for (int m = 0; m < numRolls; m++)
    {
        if (combo[dice1[m] - 1][dice2[m] - 1] > 1)
        {
            System.out.println("You rolled: " + dice1[m] + " and " + dice2[m] + " a total of " + combo[dice1[m] - 1][dice2[m] - 1]   + " time(s)");
            combo[dice1[m] - 1][dice2[m] - 1] = 0;
        }

        if (combo[dice1[m] - 1][dice2[m] - 1] == 1)
        {
        System.out.println("You rolled: " + dice1[m] + " and " + dice2[m] + " a total of " + combo[dice1[m] - 1][dice2[m] - 1] + " time(s)");
        }
    }
0 голосов
/ 18 октября 2018

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

...