Я не могу понять, как перезапустить al oop, когда человек вводит неправильный ввод - PullRequest
0 голосов
/ 04 февраля 2020

Хорошо, так что для задания мне нужно сделать al oop, чтобы пользователь вводил число 1-4 либо для ножниц из каменной бумаги, либо для завершения игры, но если они вводят что-то кроме тех, которые мне нужны быть в состоянии повторно ввести номер, но я не могу заставить свой l oop перезапустить или что-то подобное ...

Код (Это только мое время l oop

while(user < 5)
          {
              System.out.println("Please enter in a number");
              computer = generator.nextInt(3) + 1;            
              user = keyboardIn.nextInt();

              //tell the player what was chosen
              if(user == 1)//player is rock
              {
                 System.out.println ("Player is rock");  
              }
              else if (user == 2)//player is paper
              {
                 System.out.println ("Player is paper");
              }
              else if (user == 3) //player is scissors
              {
                System.out.println ("Player is scissors");

              }
              else if (user == 4)
              {
                  System.out.println("Thank you for playing!");
                  break;
              }
              else if (user >= 5)
              {
                  System.out.println(user + " was never an option. \nTry again.");
                  user = keyboardIn.nextInt();
              }

              //tell the player what the computer has chosen
              if(computer == 1)//computer is rock
              {
                 System.out.println ("Computer is rock");
              }
              else if (computer == 2)//computer is paper
              {
                 System.out.println ("Computer is paper");
              }
              else if (computer == 3)//computer is scissors
              {
                 System.out.println ("Computer is scissors");
              }


              //determine winner
              if (user == computer) //tie
              {
                 System.out.println("It is a tie");
              }
              else if (user < computer) //player is rock
              {
                 System.out.println("Computer wins");
              }
              else //computer is scissors
              {
                 System.out.println("Player wins");
              }
              System.out.println();
          }

Ответы [ 3 ]

0 голосов
/ 04 февраля 2020

Вы можете использовать

boolean gameOver = false;
while(!gameOver){
    if (user < 5){
     ....
    }
}

и установить gameOver = true в каждом из условий окончания игры.

0 голосов
/ 04 февраля 2020

Заменить деталь:

else if (user >= 5)
              {
                  System.out.println(user + " was never an option. \nTry again.");
                  user = keyboardIn.nextInt();
              }

На:

else if (user >= 5)
              {
                  System.out.println(user + " was never an option. \nTry again.");
                  continue;
              }

По сути, продолжить, тормозит текущий l oop и начать с нового, конечно, проверяя сначала условие ...

Однако, если вы хотите, чтобы ваш код был немного более эффективным, в вашем конкретном случае c это мой способ сделать это:

while(true) {
    computer = generator.nextInt(3) + 1; 
    do {
        System.out.println("Please enter in a number");           
        user = keyboardIn.nextInt();
    } while(user>=5 && user<=0);
    //The rest of your code deleting also the last else if statement
 }

Это как ваш код чище и удобнее в обслуживании. Кроме того, вы будете уверены, что после выхода кода из l oop у вас обязательно будет число от 0 до 4, что будет допустимым вариантом

0 голосов
/ 04 февраля 2020

Вы можете использовать continue, чтобы вернуться к вершине l oop. Заметьте, однако, что вверху вы запрашиваете ввод данных пользователем, и в случае ошибки вы делаете то же самое; это один раз слишком много.

...