2014-11-07 1 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

이 문자열은 정말 성가신 것처럼 보이지만 필연적 인 경우에는 상태 시스템을 구현하는 switch 문을 사용하여 while 루프를 사용할 수 있습니다.

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 
    } 

루프는 사용자 등 그것은 사용자에게 메시지를 표시 할 시간, g, 같은 유효하지 않은 입력을 입력 할 수 없습니다 동안의 코드와 같은 코드베이스에서이 방법 입력이 유효하지 않으며 유효한 옵션을 입력해야합니다.

+0

이들은 모두 훌륭한 아이디어입니다. 나는 현재 누군가를 찾고있는 내 프로그램을 검토하고 몇 가지 피드백을 제공, 교수형 집행 인 게임, 5 클래스, 아무것도 미친. 조금 시간을 할애 할 수 있다면 [email protected] – user3735449

0

간단히 말해 y/n 이외의 문자에 else 부분을 추가해야합니다. else 부분에서 showPlayAgainMessage() 함수를 호출하기 만하면됩니다.

코드의 다른 필수 섹션에 대해이 작업을 수행 할 수 있습니다.

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

으로 전자 메일을 보내십시오. 그러면 입력 코드를 어디서나 작성해야합니다. 따라서 이것이 최선의 방법은 아닙니다. –