这是我到目前为止所拥有的。由于某种原因,该计划不会让我返回scoreOne。该方法试图找到最重复的数字并使用它是点。
import java.util.Scanner;
public class Farkle {
// YOU MAY NOT DECLARE STATIC FIELDS in Farkle
// All values must be passed to and from methods (as described by method
// headers)
/**
* <p>Users set the number of players (2-6) and score needed to win
* for a game of Farkle.
*
* <p>Players take turns rolling dice and try to accumulate the required
* number of points. The game ends when the first player to accumulate
* enough points is declared the winner.
*
* <p>Program execution starts here.
*
* @param args UNUSED
*/
public static void main(String[] args) {
// TODO
Scanner in = new Scanner(System.in);
/*
* This is where you should put your welcome message and main
* program loop. Make sure to match your output to what's described
* in the project specification.
*/
System.out.println("Welcome to Farkle.");
// Number of players for this game
System.out.print("How many players? ");
int numOfPlayers = in.nextInt();
while (numOfPlayers > 6 || numOfPlayers < 2)
{
System.out.println("Invalid answer. Farkle may be played by 2-6 players. ");
System.out.print("How many players? ");
numOfPlayers = in.nextInt();
}
// User inputs points needed to win
System.out.print("How many points do you need to win? ");
int neededPoints = in.nextInt();
System.out.println("Game will play until " + neededPoints + " points");
System.out.println("It is now player 1's turn. ");
//User inputs command for game
System.out.print("Enter command: ");
String command = in.next();
boolean commandLoop = true;
int dice [] = new int [6];
int allDice [] [] = new int [10] [10];
int currentRollNum = 0;
int scoreOne = 0;
int scoreTwo = 0;
while (commandLoop) {
if (command.equals("exit"))
{
System.out.println("Game over.");
break;
}
if (command.equals("help") || command.equals("HELP"))
{
printHelp();
command = in.next();
}
if (command.equals("roll"))
{
int arrayOne [] = rollDice(dice, allDice, currentRollNum);
System.out.println("Your roll: [" + arrayOne[0] + ", " + arrayOne[1] + ", " + arrayOne[2] + ", " + arrayOne[3] + ", " + arrayOne[4] + ", " +arrayOne[5] + "]");
int var = scoreDice(arrayOne);
break;
}
if (command.equals("turn"))
{
int arrayTwo [] = rollDice(dice, allDice, currentRollNum);
System.out.print("Your roll: [" + arrayTwo[0] + ", " + arrayTwo[1] + ", " + arrayTwo[2] + ", " + arrayTwo[3] + ", " + arrayTwo[4] + ", " +arrayTwo[5] + "]");
command = in.next();
}
}
}
private static void printHelp() {
System.out.println("\"roll\" - roll the dice");
System.out.println("\"finish\" - terminate the current turn");
System.out.println("\"dice\" - print the current dice");
System.out.println("\"turn\" - print the current turn so far");
System.out.println("\"scores\" - print scores");
System.out.println("\"help\" - print this help menu");
System.out.println("\"exit\" - terminates the game");
}
private static int[] rollDice(int[] dice, int[][] allDice, int currentRollNum) {
int dice1 = Dice.rollDie(true);
int dice2 = Dice.rollDie(true);
int dice3 = Dice.rollDie(true);
int dice4 = Dice.rollDie(true);
int dice5 = Dice.rollDie(true);
int dice6 = Dice.rollDie(true);
int [] newlyRolled= new int [6];
newlyRolled [0] = dice1;
newlyRolled [1] = dice2;
newlyRolled [2] = dice3;
newlyRolled [3] = dice4;
newlyRolled [4] = dice5;
newlyRolled [5] = dice6;
return newlyRolled;
}
private static void printDice(int[] dice) {
}
/**
* Print a 2D-array to the console.
* [turn1dice1, turn1dice2, turn1dice3, turn1dice4, turn1dice5, turn1dice6, ]<br />
* [turn2dice1, turn2dice2, turn2dice3, turn2dice4, turn2dice5, turn2dice6 ]<br />
* [2, 4, 4, 3, 1, 6, ]<br />
* [1, 3, 2, 5 ]<br />
ram allDice The 2D-array of dice (representing all rolls for this
* turn) to be printed to the console
*/
private static void printDice(int[][] allDice) {
}
/**
* Print a record of all dice rolled so far during this turn
* and the number of points earned so far.
*
* <p>Output should be formatted as follows (where X is the currentTurnScore):<br />
* [turn1dice1, turn1dice2, turn1dice3, turn1dice4, turn1dice5, turn1dice6, ]<br />
* [turn2dice1, turn2dice2, turn2dice3, turn2dice4, turn2dice5, turn2dice6 ]<br />
* etc.<br />
* X points so far this turn.<br />
*
* @param allDice The 2D-array of dice (representing all rolls for this
* turn)
* @param currentTurnScore The current score for this turn
*/
private static void printTurn(int[][] allDice, int currentTurnScore) {
}
/**
* Compute the score for the currently rolled dice.
*
* Dice should be scored using the following algorithm:
* <ol>
* <li>Find all groupings of dice of the same number (die showing 0 do not count)
* <li>The largest group (> size 1) of dice of the same number will be worth
* points; the number of points is equal to the number of dice in the group.
* <li>If more than one die number has the same size group, the smallest die
* number should be used.
* <li>If no groups > size 1 exist, 1 point can be earned if there is a die
* with the number 1.
* <li>Otherwise, 0 points are earned.
* </ol>
*
* <p>Dice that are found to be worth points should be set to 0, indicating
* that they are no longer available to be re-rolled later in this turn.
*
* <p>For example:<br />
* [2, 3, 4, 3, 5, 6]<br />
* is worth 2 points (for the two 3s)<br />
* resulting dice = [2, 0, 4, 0, 5, 6]<br /><br />
* [2, 3, 4, 3, 2, 6]<br />
* is worth 2 points (for the two 2s)<br />
* resulting dice = [0, 3, 4, 3, 0, 6]<br /><br />
* [0, 3, 4, 2, 0, 6]<br />
* is worth 0 points (because there are no groups and no die showed 1)
*
* @param dice The 1D-array of current dice.
* @return The score earned by dice.
*/
private static int scoreDice(int[] dice) {
int numOne = 0;
int numTwo = 0;
int numThree = 0;
int numFour = 0;
int numFive = 0;
int numSix = 0;
for ( int i=0; i<dice.length; i++)
{
switch (dice[i]){
case 1: numOne++; break;
case 2: numTwo++; break;
case 3: numThree++; break;
case 4: numFour++; break;
case 5: numFive++; break;
case 6: numSix++; break;
}
int scoreOne = 0;
if (numOne > numTwo && numOne > numThree && numOne > numFour && numOne > numFive && numOne > numSix)
{
numOne = scoreOne;
}
else if (numTwo > numOne && numTwo > numFour && numTwo > numFive && numTwo > numSix && numTwo > numThree)
{
numTwo = scoreOne;
}
else if (numThree > numOne && numThree > numTwo && numThree > numFour && numThree> numFive && numThree > numSix){
numThree = scoreOne;
}
else if (numFour > numOne && numFour > numTwo && numFour > numThree && numFour > numFive && numFour > numSix){
numFour = scoreOne;
}
else if (numFive > numOne && numFive > numTwo && numFive > numThree && numFive > numFour){
numFive = scoreOne;
}
return scoreOne;
}
}
/**
* Resets all dice to an "unrolled" value of 1.
*
* @param dice The 1D-array of dice to be reset
*/
private static void resetDice(int[] dice) {
}
/**
* Resets all dice rolls to an uninitialized value of -1.
*
* @param allDice The 2D-array of dice to be reset
*/
private static void resetDice(int[][] allDice) {
}
/**
* Checks how many dice are still available to be rolled. A die is no longer
* active if it has a value of 0.
*
* @param dice The 1D-array of dice to check
* @return The number of dice that are still available to roll
*/
private static int numRemainingDice(int[] dice) {
}
/**
* Print all current scores to the console.
*
* <p>Output should be formatted as follows:<br />
* Player 1: X<br />
* Player 2: X<br />
* etc.<br />
* where player 1's score is stored at index 0 in the array.
*
* @param scores The 1D-array representing player's current scores.
*/
private static void printScores(int[] scores) {
}
/**
* Determines if one of the players has accumulated
* enough points (>= neededPoints) to win.
*
* @param scores The 1D-array of current scores
* @return The index of the winning player if one exists, else -1
*/
private static int findWinner(int[] scores, int neededPoints) {
}
}
答案 0 :(得分:1)
如果骰子数组的长度为0(如果它是空的),则for循环将永远不会运行。这意味着有可能无法返回任何不允许的内容。要解决此问题,必须在可能的代码路径中添加一个return语句,包括for循环永远不会执行的路径。为此,请在for循环后的方法末尾添加return 0
。