在Java中输入字符串的验证

时间:2013-11-04 15:08:39

标签: java validation input

我一直试图解决这个问题。基本上,它是一种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!  

2 个答案:

答案 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")))