Базовая программа 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.