Базовая программа Java Dice - проблема с поиском самой длинной полосы

В настоящее время я работаю над базовым (и, как я вижу, часто назначаемым) Java-проектом, в котором я должен создать программу, которая имитирует бросание костей. В моем проекте я только симулирую вращение двух шестигранных кубика. Массивы необходимо использовать при выполнении этой задачи.

Пока что у меня есть блок try / catch, который запрашивает у пользователя количество бросков, которые он хотел бы смоделировать, и гарантирует, что он дает целочисленный ввод. Это, в свою очередь, создает длину массива для симулятора игры в кости. До этого момента мой код работал, но теперь я застрял в том, как найти самую длинную серию последовательных сумм в этом массиве.

Я почти уверен, что мне нужно сравнивать значение dieSum для каждого броска с самим собой, и если dieSum == dieSum, то увеличивая переменную для моей текущей полосы на 1. Я просто не уверен, как это сделать, я подозреваю, что может возникнуть проблема, потому что моя переменная dieSum не сохраняется в массиве.

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

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

    //Variable listing and initialization
    int rollTotal = 0; //number of trials
    int dieSum; //sum of the outcome of both dice per roll

    //Try - Catch block to ensure positive integer input from user for rollTotal
    System.out.println("***Welcome to the Dice Roll Probability Generator***");
    while (true){
        System.out.println("Enter how many dice rolls you would like to simulate: ");
        try {
            rollTotal = kbd.nextInt() + 1;
            break;
        } catch (Exception e) {
            System.out.println("Please only enter a positive integer. Try again. ");
            kbd.next();

        }
    }


    int die1[] = new int[rollTotal]; //Variable for the first die
    int die2[] = new int[rollTotal]; //Variable for the second die


    int[] diceArray = new int[rollTotal];   
    for (int i=1; i<diceArray.length; i++ ) {
        die1[i] = (int)(6.0*Math.random() + 1.0); //Generate random # between 1-6
        die2[i] = (int)(6.0*Math.random() + 1.0);
        System.out.println("***Roll " + i + "***");
        System.out.print("Dice one rolled: " + die1[i] + ", dice two rolled: " + die2[i] + "\n") ;
        dieSum = die1[i] + die2[i];
        System.out.println("Total rolled was: " + dieSum + "\n");

    }
}

}

Большое спасибо за то, что взглянули на это для меня, и извините за свежесть сайта и программирование в целом.

2 ответа

Решение

Вам нужно отслеживать еще две переменные: int biggestStreak, currentStreak (инициализируется 1).

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

int lastDieSum = die1[i-1] + die2[i-1];

if (lastDieSum == dieSum) {
     currentStreak++;
     if (currentStreak > biggestStreak) {
         biggestStreak = currentStreak;
     } 
} else {
     currentStreak = 1;
}

Последний бит теперь также сохраняет текущую полосу в biggestStreak если он больше, чем самая большая полоса. Наконец, текущая полоса обнуляется, когда значение больше не совпадает с lastDieSum,

Надеюсь, это поможет!

Одним из довольно простых решений было бы создать еще две переменные в вашем коде.

Тот, который содержит текущую серию, и другой, который содержит предыдущий dieSum.

Каждый раз, когда вы заканчиваете бросок, запускайте оператор if, который сравнивает текущий dieSum с предыдущим dieSum и, если они равны, увеличивает вашу полосу, иначе просто установите вашу полосу обратно в 0.

Другие вопросы по тегам