Почему мой цикл while не читает оба оператора? - PullRequest
0 голосов
/ 21 февраля 2019

Итак, у меня есть этот код, предназначенный для игры в простую игру «камень, ножницы, бумага» с использованием другого компьютерного класса перемещения и ввода строки.Это для школьного проекта, поэтому мы должны использовать циклы while, но по какой-то причине цикл, по-видимому, не оценивает обе стороны аргумента и завершает цикл, как только оценка компьютера достигает пользовательского ввода (который является числом- пользователь вводит номер, на который он хотел бы играть).(PS: я супер новичок в Java, поэтому я все еще пытаюсь понять основы :))

public class RockPaperScissors {

 public static void main(String[] args) {

   Scanner input = new Scanner(System.in);

        int playerScore, computerScore; // score
        playerScore = 0;
        computerScore = 0;

        System.out.println("Enter number of points to win:"); // number of rounds
        int number = input.nextInt();

        boolean PLAYER_VALID = true;

  while ((playerScore < number) || (computerScore < number)) {

    System.out.println("Choose Rock, Paper or Scissors:");
    String playerMove = input.next().toLowerCase();

    if (!(playerMove.equals("rock") // ensuring valid user input
                || playerMove.equals("paper")   
                || playerMove.equals("scissors"))) 
            {   
                PLAYER_VALID = false;
            }

        // computer move

        String computerMove = ComputerOpponent.getMove();

        // determining win

        if (playerMove.equals(computerMove)) 
            {   
                System.out.println("The computer chose " + playerMove + " so, it's a tie!");    
            }

        else if (playerMove.equals("rock")) 
            {           
                if (computerMove.equals("paper")) 
                {               
                    System.out.println("Computer chose paper, you lose :(");
                    computerScore += 1;
                }   
                else {
                    System.out.println("Computer chose scissors, you win :)");
                    playerScore += 1;
                }
            }

        else if (playerMove.equals("paper")) 
            {           
                if (computerMove.equals("scissors")) 
                {               
                    System.out.println("Computer chose scissors, you lose :(");
                    computerScore += 1;
                }   
                else {
                    System.out.println("Computer chose rock, you win :)");
                    playerScore += 1;
                }
            }

        else if (playerMove.equals("scissors")) 
            {           
                if (computerMove.equals("rock")) 
                {               
                    System.out.println("Computer chose rock, you lose :(");
                    computerScore += 1;
                }   
                else {
                    System.out.println("Computer chose paper, you win :)");
                    playerScore += 1;
                }
            }

        System.out.println("The current score is " 
        + "(" + playerScore + "," + computerScore + ")");

        }  // while - round

        if (computerScore == number) 
            {
                System.out.println("Computer wins. Better luck next time!");
            }
        else if (playerScore == number)
            {
                System.out.println("Congrats! You win!");
            }
        else
            System.out.println("Something happened....ERROR");

  }

}

1 Ответ

0 голосов
/ 22 февраля 2019

Это потому, что вы используете и или предложение.

Использование ||(наиболее часто известный как 'или') оценит первое выражение, если оно истинно, тогда (в java) не будет вычислять второе выражение и попадет в цикл.

С другой стороны, использование && (наиболее часто известное как 'и') оценит обе стороны выражения, и если ОБА из них имеют значение true, то оно войдет в цикл.

В этом случае вы хотите, чтобы ни пользователь, ни компьютер не достигли «номера», в этом случае вам следует использовать &&

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...