基本Java Dice程序 - 找不到最长条纹

时间:2015-02-05 22:03:06

标签: java arrays dice

我目前正在研究一个基本的(我可以看到,经常分配的)java项目,我将在其中创建一个模拟骰子滚动的程序。在我的项目中,我只模拟两个六面模具的滚动。需要使用数组来完成此任务。

到目前为止,我已经尝试了/ 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 个答案:

答案 0 :(得分:1)

您需要跟踪另外两个变量: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相同时,当前条纹将重新设置为零。

我希望这有帮助!

答案 1 :(得分:0)

一个非常简单的解决方案是在代码中再创建两个变量。

持有当前连胜的一个,另一个拥有前一个dieSum。

每次你完成一个滚动运行if语句,将当前的dieSum与之前的dieSum进行比较,如果它们相等,则增加你的条纹,否则只需将你的条纹设置回0。