[英]Java: Trying to take keyboard input and evaluate it in an if/else condition to set a boolean value to true or false
我正在開發一個示例擲骰子游戲,該游戲擲骰子 10 次,除非被用戶輸入打斷。
我有一個基於兩個 boolean 值的 state 運行的 while 語句,其中一個是根據用戶輸入設置的。
我目前的進度如下。 任何建議都會有很大幫助!
import java.util.Scanner;
import java.swing.JOptionPane;
import java.util.Random;
public class DiceGame
{
public static void main(String[] args)
{
Random rand = new Random();
int player1Wins = 0;
int player2Wins = 0;
int ties = 0;
int rollCount = 0;
boolean rollAgain = true;
while (rollCount < 10 && rollAgain)
{
int player1Dice = rand.nextInt(6) + 1;
int player2Dice = rand.nextInt(6) + 1;
if (player1Dice > player2Dice)
{
player1Wins++;
System.out.println("Player 1 wins!!");
}
else if (player2Dice > player1Dice)
{
player2Wins++;
System.out.println("Player 2 wins!!");
}
else
{
ties++;
System.out.println("It's a tie...");
}
rollCount++;
String answer;
Scanner keyboard = new Scanner(System.in);
System.out.println("Would you like to roll again? Press y for yes");
answer = keyboard.nextLine();
if (answer == "y")
{
rollAgain = true;
}
else
{
rollAgain = false;
}
}
System.out.println();
System.out.println("Player 1 Total wins: " + player1Wins);
System.out.println("Player 2 Total wins: " + player2Wins);
System.out.println("Total Ties: " + ties);
System.out.close();
}
}
嘗試根據單一職責原則分解代碼。 干凈的代碼,易於測試,更細粒度。
我做了一個快速的實現,遠不是最好的解決方案,但這只是為了舉例說明這樣的原則:
public class Dice implements Comparable<Dice> {
private int number;
public Dice(int number) {
this.number = number;
}
public int getNumber() {
return number;
}
@Override
public int compareTo(Dice o) {
return Integer.compare(number, o.number);
}
}
public class Counter {
private int playerOneWins;
private int playerTwoWins;
private int ties;
public void check(Dice player1, Dice player2) {
if (player1.compareTo(player2) > 0) {
System.out.println("Player 1 wins!!");
playerOneWins++;
} else if (player2.compareTo(player1) > 0) {
System.out.println("Player 2 wins!!");
playerTwoWins++;
} else {
System.out.println("It's a tie...");
ties++;
}
}
public void showResults() {
System.out.println();
System.out.println("Player 1 Total wins: " + playerOneWins);
System.out.println("Player 2 Total wins: " + playerTwoWins);
System.out.println("Total Ties: " + ties);
System.out.close();
}
}
public class InputReader {
private static final String YES = "y";
private Scanner keyboard = new Scanner(System.in);
public boolean askUser() {
System.out.println("Would you like to roll again? Press y for yes");
String answer = keyboard.nextLine();
return YES.equalsIgnoreCase(answer);
}
}
public class Roller {
private Random random = new Random();
public Dice roll()
{
return new Dice(random.nextInt(6) + 1);
}
}
public class Game {
private static final int MAX_ROLLS = 10;
private Roller roller = new Roller();
private Counter counter = new Counter();
private InputReader inputReader = new InputReader();
public void start() {
int rolls = 0;
boolean continueRolling = true;
while (rolls <= MAX_ROLLS && continueRolling) {
Dice player1 = roller.roll();
Dice player2 = roller.roll();
counter.check(player1, player2);
rolls++;
continueRolling = inputReader.askUser();
}
counter.showResults();
}
public static void main(String[] args) {
new Game().start();
}
}
我希望它可以幫助您理解這樣的原理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.