我一直试图解决这个问题。基本上,它是一种Rock-Paper-Scissors类型的游戏,一切都与输入验证不同。任何帮助将不胜感激。
这是我的代码:
import java.util.Scanner;
public class RockPaperScissors
{
public static void main(String[] args)
{
Scanner scan = new Scanner (System.in);
System.out.println("Player 1: Choose rock, paper or scissors:");
String player1 = scan.next() .toLowerCase();
//Player 1 Input Validation
if ((player1 != ("rock"))
|| (player1 != ("paper"))
|| (player1 != ("scissors")))
{
System.out.println("Thats not right, choose rock, paper or scissors");
}
//Send Back to input
System.out.println("Player 2: Choose rock, paper or scissors:");
String player2 = scan.next() .toLowerCase();
//Player 2 Input Validation
if ((player2 != ("rock"))
|| (player2 != ("paper"))
|| (player2 != ("scissors")))
{
System.out.println("Please choose rock, paper or scissors");
}
System.out.println("Player 1 chose " + player1);
System.out.println("Player 2 chose " + player2);
//For Player 1 to win
if((player1.equals("rock"))&&(player2.equals("scissors"))
||(player1.equals("scissors"))&&(player2.equals("paper"))
||(player1.equals("paper"))&&(player2.equals("rock")))
{
System.out.println ("Player 1 Wins!");
}
//For a draw
if (player1.equals(player2))
{
System.out.println ("Its a Draw!");
}
//For Player 2 to win
if ((player2.equals("rock"))&&(player1.equals("scissors"))
||(player2.equals("scissors"))&&(player1.equals("paper"))
||(player2.equals("paper"))&&(player1.equals("rock")))
{
System.out.println("Player 2 wins!");
}
}
这是我得到的输出(Rock and Paper,是用户输入):
Player 1: Choose rock, paper or scissors:
Rock
Thats not right, choose rock, paper or scissors
Player 2: Choose rock, paper or scissors:
Paper
Please choose rock, paper or scissors
Player 1 chose rock
Player 2 chose paper
Player 2 wins!
答案 0 :(得分:3)
而不是使用==
和!=
使用equals()
和equalsIgnoreCase()
方法。
使用Scanner
时使用nextLine()
方法代替next()
。
使用常量而不是变量字符串。
并且当玩家的输入不正确并且您希望玩家再次输入时,最好使用像while
这样的循环结构,并且当用户给出有效输入时,则打破循环或者在函数内部使用循环并返回一个值。
喜欢
修改:在评论中回答您的问题,试试这个
class Player {
String choice;
}
class Game {
static final ROCK = "ROCK";
static final PAPER = "PAPER";
static final SCISSORS = "SCISSORS";
Scanner scanner = new Scanner();
Player[] players = new Player[2]; //assuming you only want 2 players Use ArrayList for unspecified number of users and use a separate method to initialize it.
public Game {
for(int i =0 ; i<2 ; i++) {
players[i]= new Player();
}
}
private String getPlayerChoice() {
System.out.println("Please enter your choice");
System.out.println("1.Rock\n2.Paper\n3.Scissors")
return scanner.nextLine();
}
void getInputAndValidate(Player p) {
p.choice = getPlayerChoice();
while(true) {
if(p.choice.equalsIgnorecase(ROCK) ||
p.choice.equalsIgnorecase(PAPER) ||
p.choice.equalsIgnorecase(SCISSORS) ) {
break;
}
else {
System.out.println("Please enter a valid input");
p.choice = getPlayerChoice(); \\ use the scanner as an instance variable.
}
}
}
void getInput() {
for(int i = 0; i<2;i++) {
System.out.println("Player " + (i+1));
getInputAndValidate(players[i]);
}
}
void compute(){
// implement your game logic here
}
public static void main(String[] args) {
Game g = new Game();
g.getInput();
g.compute();
}
}
答案 1 :(得分:1)
if ((player1 != ("rock"))
|| (player1 != ("paper"))
|| (player1 != ("scissors")))
将所有!=更改为equals或equalsIgnoreCase()以避免大小写混乱
if ((!player1.equalsIgnoreCase("rock"))
|| (!player1.equalIgnoreCase("paper"))
|| (!player1.equalsIgnoreCase("scissors")))