1

私はしばらくこのプログラムを修正しようとしてきました。基本的にはじゃんけんタイプのゲームで、入力の検証以外はすべて機能します。どんな助けでも大歓迎です。

これは私のコードです:

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!");
    }

}

そして、これは私が得る出力です(ロックとペーパーはユーザー入力です):

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!  
4

2 に答える 2

3

文字列を比較する場合は、 andメソッド==!=使用する代わりに使用します。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();
}

}
于 2013-11-04T15:14:59.223 に答える
1
if ((player1 != ("rock"))
    || (player1 != ("paper"))
    || (player1 != ("scissors")))

大文字と小文字の混同を避けるために、すべての != を equals または equalsIgnoreCase() に変更します

if ((!player1.equalsIgnoreCase("rock"))
    || (!player1.equalIgnoreCase("paper"))
    || (!player1.equalsIgnoreCase("scissors")))
于 2013-11-04T15:14:50.847 に答える