2012-10-04 6 views
2

사용자가 선택한 가위 바위 가위 프로그램을 만들어서 컴퓨터의 선택에 따라 테스트해야합니다. 매 경기가 끝나면 선수에게 계속할지 묻고, 계속하거나 종료하려면 'Y'또는 'N'을 입력해야합니다. 내가 생각할 수있는 최선의 방법은 while 루프 였고 마지막 비트를 제외한 모든 것이 잘 작동합니다.자바 록 페이퍼 가위 루프

import java.util.Scanner; 

public class rockpaperscissors { 
    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 
     char cont = 'y'; 

     while (cont == 'y'){   
      int com = (int)(Math.random() * 3); 

      System.out.println("Paper (0), Rock (1), or Scizzors (2)?"); 
      int hum = input.nextInt(); 

      if (com==(hum)) 
       System.out.println("It's a tie!"); 

      else if (hum == 0) 
      { 
       if (com == 1) 
        System.out.println ("You chose paper, computer chose rock You Win!"); 
       else if (com == 2) 
        System.out.println ("You chose paper, Computer chose scissors You Lose!"); 
      } 

      else if (hum == 1) 
      { 
       if (com == 2) 
        System.out.println ("You chose Rock, computer chose scissors You Win!"); 
       else if (com == 0) 
        System.out.println ("You chose Rock, Computer chose paper You Lose!"); 
      } 

      else if (hum == 2) 
      { 
       if (com == 0) 
        System.out.println ("You chose Scissors, computer chose paper You Win!"); 
       else if (com == 1) 
        System.out.println ("You chose Scissors, Computer chose rock You Lose!"); 
      } 

      System.out.println("Would you like to continue? (Y/N)"); 
      cont = input.nextLine().charAt(0); 
     }  
    } 
} 

루프를 실행하면 게임이 제대로 실행되지만 '인덱스 범위를 벗어나는 문자열'오류가 발생합니다. 어떤 생각이 어떻게 해결할 수 있습니까?

답변

2

nextInt()은 입력 버퍼에서 번호를 읽고 새 줄을 그대로 둡니다. 따라서 input.nextLine()으로 전화를 걸면 빈 줄이 생깁니다. 나머지 줄은 번호 뒤에옵니다. 다음 줄을 읽고 비어 있지 않은지 확인해야합니다. 맞다면 다시 읽으십시오.

덧붙여 말하자면 누가 이겼는지 알아내는 코드는 약간 번거롭습니다. 내가 너라면, 좀 더 일반적이고 깨끗하게하려고 노력할거야. 너무 많은 코드를 추가하지 않고 Rock Paper Scissors Lizard Spock과 같이 더 복잡한 게임을 처리 할 수있는 솔루션에 대해 생각해보십시오.

1

사용자로부터 응답을 받으면 다음 줄을 읽지 않아 스캐너에 새로운 줄 문자가 계속 표시됩니다. 그런 다음 nextline을 읽을 때 새 줄을 읽으므로 charat(0)이 없습니다.

변경 :

cont = input.nextLine().charAt(0); 

에 :

cont = input.next().charAt(0); 
-1
package rockpaper; 


import java.util.Scanner; 

/** 
* 
* @author Allen E. 
*/ 

public class RockPaper { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     int rock = 0; 
     int paper = 1; 
     int Scissors = 2; 

     int user = 0; 
     int computer = 0; 
     int gamesplayed = 0; 

     Scanner scan = new Scanner(System.in); 

     while (gamesplayed < 3) 
       { 


     System.out.println("Rock = 0 , Paper = 1, Scissors = 2"); 
     String userinput = scan.nextLine(); 

     int convertinput = Integer.valueOf(userinput); 
     int Computerinput = (int)(Math.random()*3); 

     if (Computerinput == 1 && convertinput == 0) 
     { 
      System.out.println("Paper beats Rock " + 
        "\nThe computer won"); 
      gamesplayed++; 
      computer++; 
     } 
     else if (convertinput == 1 && Computerinput == 0) 
     { 
      System.out.println("Paper beats Rock " + 
        "\nYou Win!"); 
      gamesplayed++; 
      user++; 
     } 
    if (Computerinput == 0 && convertinput == 2) 
    { 
     System.out.println("Rock beats Scissors " + 
       "\nThe computer won"); 
     gamesplayed++; 
     computer++; 
    } 
    else if (convertinput == 0 && Computerinput == 2) 
    { 
     System.out.println("Rock beats Scissors " + 
       "\nYou Win!"); 
     gamesplayed++; 
     user++; 
    } 

    if (Computerinput == 2 && convertinput == 1) 
    { 
     System.out.println("Scissors beats Paper " + 
       "\nThe computer won"); 
     gamesplayed++; 
     computer++; 
    } 
    else if (convertinput == 2 && Computerinput == 1) 
    { 
     System.out.println("Scissors beats Paper " + 
       "\nYou Win"); 
     gamesplayed++; 
     user++; 
    } 

    /************************************************* 
     *            * 
     *            * 
     *     Handling a tie    * 
     *            * 
     *            * 
     *************************************************/ 

    if (Computerinput == 0 && convertinput == 0) 
    { 
     System.out.println("Rock ties Rock " + 
       "\nTie"); 

    } 
    if (Computerinput == 1 && convertinput == 1) 
    { 
     System.out.println("Paper ties Paper " + 
       "\nTie"); 

    } 
    if (Computerinput == 2 && convertinput == 2) 
    { 
     System.out.println("Scissors ties Scissors " + 
       "\nTie"); 

    }/*End of While Loop*/ 

    } 
    } 
}