你如何在java中的yahtzee程序中重新滚动?

时间:2016-10-18 03:32:02

标签: java arrays

我一直在为我的Java课程简介工作,我无法弄清楚如何完成我需要做的两件事。

我现在拥有的:我创建了一个滚动五个骰子的数组,并显示结果。我的代码如下......

package operation.pkg7;

import java.util.Random;
import java.util.Scanner;
public class Operation7 {
 public static void main(String[] args) 
{    


    int[] dice = new int[5];
 Random r = new Random();

 //This makes the dice 
 for (int i = 0; i < 5; i++) {
 dice[i] = r.nextInt(6) + 1;
 }
 //This displays the dice rolls
 for (int i = 0; i < 5; i++) {
 System.out.print("Roll " + (i+1) + ":" );
 System.out.print(" " + dice[i] + " ");
 }
 System.out.println();
 //..........................................
 int[] counts = new int[6];
 for (int i = 0; i < 6; i++){
 counts[i] = 0;
 }

 //count up the values
 for (int i = 0; i < 5; i++) {
 int diceIndex = dice[i] - 1;
 counts[diceIndex]++;
 }
System.out.println();
 for (int i = 0; i < 6; i++){
 System.out.println("The number of " + (i+1) + "s is : " +
counts[i]);
}
}
}

现在,我成功地给了我模具的结果,但我在确定如何进行重新滚动时遇到了问题。这是我希望程序在显示初始掷骰后要求的示例...

Roll 1: 2 Roll 2: 6 Roll 3: 1 Roll 4: 4 Roll 5: 2

Would you like to re-roll any dice? y/n
y

Which dice would you like to re-roll? 1-5
2, 3, 4

Roll 1: 2 Roll 2: 3 Roll 3: 2 Roll 4: 3 Roll 5: 2

Would you like to re-roll any dice? y/n
n

Roll 1: 2 Roll 2: 3 Roll 3: 2 Roll 4: 3 Roll 5: 2

这就是目标。一旦我这样做,我需要让程序显示最好的分数...例如,如果有两个三分之三和三分之二,它需要说它是一个满屋子,或显示yahtzee如果有五个相同数量等。

有人有什么建议吗?

2 个答案:

答案 0 :(得分:0)

将代码置于do-while循环中,并在do-while循环条件检查之前放置用户输入的条件。

答案 1 :(得分:0)

您可以在dice数组中获得roll store的结果,只需在这些位置为骰子创建新的随机结果。例如。如果你重新滚动#2,那么在索引1中添加一个新的随机数。

至于确定各种类型的卷,例如满屋,您需要为每个卷定义通用逻辑。例如,您可以定义一个方法:

public static boolean isFullHouse(int[] diceRoll){
    //return true if the roll is a full house, false otherwise
}

但是,我认为你真正想要的不仅仅是确定一个滚动是一个满堂红,还要使用该场景的评分规则来计算总得分。

编辑#1:

在继续之前,请至少阅读this page标题为“询问作业”的部分。

我将尝试说明我认为如何在不提供完整代码的情况下完成重新滚动。如上所述,由于您需要提示用户他们打算重新掷出哪个骰子,您可以处理该输入并将其用作骰子阵列的标记。因此,如果您的示例中的用户2,3,4使用Scanner.getLine()来读取该输入,然后使用String方法将其分开。获得单个部分后,您可以使用int类将其转换为Integer个值。最后,从它们中减去1来调整你的骰子数组指示从0开始的事实。

现在你有一个包含你的骰子数组中的指示的数组。此新数组中的每个项目仅用于引用骰子数组的索引。所以让我们调用第二个数组userInput。继续2,3,4示例userInput[0]=1userInput[1]=2userInput[2]=3

您需要做的就是遍历userInput,每次循环生成一个新的随机数。然后将此随机数存储在骰子数组中存储在userInput数组当前位置的索引处。

至于确定最佳可能分数,正如我所建议的那样,为每个分别编写单独的方法以确定它们是否存在,然后再调用其中每个方法并报告可能的最高分数。

让我们把其中一个作为一个例子中的3个。也许考虑它的最简单的方法是循环所有可能的骰子卷(0到6),这样每次通过循环你都会计算每个卷在当前骰子卷中出现的数量。因此,在循环1中,您正在寻找三个1,而在循环2中,您正在寻找三个2,依此类推。

在这个循环内部你创建另一个循环来遍历当前骰子掷骰中的所有骰子(你的dice数组),每次循环你检查当前骰子是否是你的数字'目前正在寻找你的外循环。如果它是来自外部循环的数字,那么你递增一个计数器(在外部循环中定义并初始化但在内部循环之外,以便每次外部循环递增时重置)以表示您找到的那个数字的数量至今。

如果计数器在内循环结束前达到3,你知道你有3种,所以你有方法return true,因为你没有理由继续(不可能有2种不同的3种)。否则,您的方法应返回false以指示没有匹配项。

注意如果你想雄心勃勃,你可以通过使你的计数器的限制成为你的方法的参数来运用良好的编程习惯和重用代码,这样你就可以使用相同的逻辑3一种和一种4种。

提示有一种更聪明的方法可以做到这一点,但我认为这种方法会与你已经知道的结构更加一致。

我希望这有助于您入门!