2014-11-07 2 views
0

Мой вопрос: как ограничить ввод пользователем Y/N или y/n (в Java). В настоящее время я использую equals() и планирую изменить их на equalsignorecase(), это должно позаботиться о части дела. Однако это не мешает пользователю вводить другие символы (например: H или h). В настоящее время, когда символ, кроме y или n, вводится, программа переходит прямо к «спасибо за воспроизведение сообщения» и к концу игры.Java, BufferedReader, ограничить ввод пользователя, y/n

Я относительно новичок в программировании, поэтому, пожалуйста, приведите примеры с предложением, желательно полным примером. Мне действительно очень далеко. Дополнительно, если вы чувствуете, что этот раздел кода может быть написан лучше, я открыт для перезаписи, но еще раз просьба представить полный пример.

Я понимаю, что этот вопрос немного широк для stackoverflow, но я действительно мог бы использовать понимание более опытных программ. Спасибо за ваше время.

// creates instance of BufferedReader 
// prompts user to play the game again 
// places user input in a try 
// if user wants to play again, call startGame() 
// if user dosen't want to play again, keep asking anyways 
private void showPlayAgainMessage() 
{ 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println(); 
    System.out.println("Do you want to play again? (y/n)"); 

    try 
    { 
     String playAgain = br.readLine(); 

     // Do you want to play again? Is y. 
     if(playAgain.equals("y")) 
     { 
      startGame();//else prompt another question with if else 
     } 

     // Do you want to play again? Is n. 
     else if(playAgain.equals("n")) 
     { 
      System.out.println(); 
      System.out.println("Last chance. Play again? (y/n)"); 
      playAgain = br.readLine(); 
       // Last chance. Play again? Is y. 
       if(playAgain.equals("y")) 
       { 
        startGame(); 
       } 
       // Last chance. Play again? Is n. 
       else if(playAgain.equals("n")) 
       { 
        System.out.println(); 
        System.out.println("How about Minesweeper? (y/n)"); 
        playAgain = br.readLine(); 
        // How about Minesweeper? Is y. 
         if(playAgain.equals("y")) 
         { 
          System.out.println(); 
          System.out.println("I really wish we had Minesweeper..."); 
          System.out.println("Lots of Hangman though...Hangman? (y/n)"); 
          playAgain = br.readLine(); 
           // Lots of Hangman though...Hangman? Is y. 
           if(playAgain.equals("y")) 
           { 
            startGame(); 
           } 
           // Lots of Hangman though...Hangman? Is n. 
           else if (playAgain.equals("n")) 
           { 
            System.out.println(); 
            System.out.println("ok..."); 
           } 
          }  
         } 
        } 
       } 

ответ

0

Эта строка вопроса выглядит действительно раздражает, но если необходимо, вы можете использовать время цикла с переключателем заявления, реализующего государственную машину.

int state = 0; 
while (state < 4) { 

    switch (state) { 

    case 0: System.out.println("Do you want to play again? (y/n)"); break; 
    case 1: System.out.println("Last chance. Play again? (y/n)"); break; 
    case 2: System.out.println("How about Minesweeper? (y/n)"); break; 
    case 3: System.out.println("I really wish we had Minesweeper..."); 
      System.out.println("Lots of Hangman though...Hangman? (y/n)");break; 
    } 

    String playAgain = br.readLine(); 

    if(playAgain.equals("y")) 
    { 
     startGame(); 
     state = 0; 
    } 
    else if(playAgain.equals("n")) { 
     state++; 
    } 

} 
System.out.println("ok..."); 

Каждый ответ «n» подготовит вас к следующему вопросу. Недействительный ввод снова покажет текущий вопрос.

0

сделать функцию, которая проверяет ввод пользователя и вызывает его там, где вы хотите.

public boolean checkInput(String in){ 

if(in.equalsIgnoreCase("y") || in.equalsIgnoreCase("n")) 
    return true; 
else 
    return false; 

} 

Вызов этот метод из вашего кода базы как

System.out.println(); 
System.out.println("Do you want to play again? (y/n)"); 

try 
{ 
    String playAgain = br.readLine(); 
    while(!checkInput){ 
     System.out.println("Please enter Valid Input Y/N"); 
     playAgain = br.readLine(); 
    } 

    // Do you want to play again? Is y. 
    if(playAgain.equals("y")) 
    { 
     startGame();//else prompt another question with if else 
    } 

Вот код в то время как цикл не позволит пользователю ввести любой неверный ввод как час, г, и т.д. Он предложит пользователю что вход недействителен и он должен ввести действительный параметр.

+0

все это отличные идеи. В настоящее время я ищу кого-то, чтобы просмотреть мою программу и предоставить мне некоторые отзывы, это игра в палач, 5 классов, ничего сумасшедшего. Если вы могли бы сэкономить немного времени, пожалуйста, напишите мне по адресу [email protected] – user3735449

0

Вам нужно просто сделать это i.e, добавить часть else для символов, отличных от y/n. Просто вызовите функцию showPlayAgainMessage() в части else.

Вы можете сделать это для других обязательных разделов вашего кода.

private void showPlayAgainMessage() 
{ 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println(); 
    System.out.println("Do you want to play again? (y/n)"); 

    try 
    { 
     if (playAgain.equals("y")) { 
      startGame(); 
     } 
     else if (playAgain.equals("n")) { 
      System.out.println(); 
      System.out.println("Last chance. Play again? (y/n)"); 
      playAgain = br.readLine(); 

      if (playAgain.equals("y")) { 
       System.out.println(); 
       System.out.println("I really wish we had Minesweeper..."); 
       System.out.println("Lots of Hangman though...Hangman? (y/n)"); 
       playAgain = br.readLine(); 
       // Lots of Hangman though...Hangman? Is y. 
       if (playAgain.equals("y")) { 
        startGame(); 
       } // Lots of Hangman though...Hangman? Is n. 
       else if (playAgain.equals("n")) { 
        System.out.println(); 
        System.out.println("ok..."); 
       } 
      } 

     } 
     else{ 
      System.out.println("Sorry, invalid input. y/n required."); 
      showPlayAgainMessage(); // this will prompt the user again for y/n if any other character is typed. 
     } 
    }catch(Exception e){ 

    } 
} 
+0

, тогда вам придется писать этот код еще везде, где вы берете ввод. Так что это не лучший способ пойти –

Смежные вопросы