2015-01-23 2 views
0

루프를 제외한 모든 작업이 "y"또는 "n"을 입력 할 때 다시 재생할 것인지 묻는 메시지가 나타나면 내 인생에 대해 파악할 수없는 오류가 발생합니다.잠시 시간을 갖지 못하거나 ... while 루프를 사용하면 여러 답을 찾아 볼 수 없습니다. 아무것도 작동하지 않습니다.

이 코드가 형식을 벗어나면 실례합니다. 복사하여 붙여 넣기하십시오.

/* © Tucker Fowler 2015 
*/ 
package rpslizardspock; 

import java.util.Scanner; 
import java.util.Random; 

/** 
* 
* @author Tucker 
*/ 
public class RpsLizardSpock { 


public static void main(String[] args) { 

    String userChoice; 
    boolean goAgain; 
    boolean y = true; 
    boolean n = false; 

    Scanner sc = new Scanner(System.in); 
    Random ra = new Random(); 
    while (goAgain = y) { 

     System.out.println("Welcome to Rock, Paper, Scissors, Lizard, Spock\n\n" 
       + "Please make a Choice: "); 
     userChoice = sc.nextLine(); 

     String ucConv = userChoice.toUpperCase(); 

     System.out.println("You Chose: " + userChoice); 

     int cpuChoice = ra.nextInt(5) + 1; 

     if ((cpuChoice == 1) && (((ucConv.equals("LIZARD"))) || ((ucConv.equals("SCISSORS"))))) { 
      System.out.println("\n\nComputer chose Rock, You Lose"); 
     } else if ((cpuChoice == 1) && (((ucConv.equals("PAPER"))) || ((ucConv.equals("SPOCK"))))) { 
      System.out.println("\n\nComputer chose Rock, You Win"); 
     } else if ((cpuChoice == 2) && (((ucConv.equals("SPOCK"))) || ((ucConv.equals("ROCK"))))) { 
      System.out.println("\n\nComputer chose Paper, You Lose"); 
     } else if ((cpuChoice == 2) && (((ucConv.equals("SCISSORS"))) || ((ucConv.equals("LIZARD"))))) { 
      System.out.println("\n\nComputer chose Paper, You Win"); 
     } else if ((cpuChoice == 3) && (((ucConv.equals("LIZARD"))) || ((ucConv.equals("PAPER"))))) { 
      System.out.println("\n\nComputer chose Scissors, You Lose"); 
     } else if ((cpuChoice == 3) && (((ucConv.equals("SPOCK"))) || ((ucConv.equals("ROCK"))))) { 
      System.out.println("\n\nComputer chose Scissors, You Win"); 
     } else if ((cpuChoice == 4) && (((ucConv.equals("SPOCK"))) || ((ucConv.equals("PAPER"))))) { 
      System.out.println("\n\nComputer chose Lizard, You Lose"); 
     } else if ((cpuChoice == 4) && (((ucConv.equals("SCISSORS"))) || ((ucConv.equals("ROCK"))))) { 
      System.out.println("\n\nComputer chose Lizard, You Win"); 
     } else if ((cpuChoice == 5) && (((ucConv.equals("ROCK"))) || ((ucConv.equals("SCISSORS"))))) { 
      System.out.println("\n\nComputer chose Spock, You Lose"); 
     } else if ((cpuChoice == 5) && (((ucConv.equals("PAPER"))) || ((ucConv.equals("LIZARD"))))) { 
      System.out.println("\n\nComputer chose Spock, You Win"); 
     } else if ((cpuChoice == 1) && (ucConv.equals("ROCK"))) { 
      System.out.println("\n\nComputer chose Rock also, Draw"); 
     } else if ((cpuChoice == 2) && (ucConv.equals("PAPER"))) { 
      System.out.println("\n\nComputer chose Paper also, Draw"); 
     } else if ((cpuChoice == 3) && (ucConv.equals("SCISSORS"))) { 
      System.out.println("\n\nComputer chose Scissors also, Draw"); 
     } else if ((cpuChoice == 4) && (ucConv.equals("LIZARD"))) { 
      System.out.println("\n\nComputer chose Lizard also, Draw"); 
     } else if ((cpuChoice == 5) && (ucConv.equals("SPOCK"))) { 
      System.out.println("\n\nComputer chose Spock also, Draw"); 
     } 
     System.out.println("\n\n Would you like to play again? y/n"); 
     goAgain = sc.nextBoolean(); 
    } 
} 

}

내가 오류는 다음과 같습니다

Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Scanner.java:909) 
    at java.util.Scanner.next(Scanner.java:1530) 
    at java.util.Scanner.nextBoolean(Scanner.java:1825) 
    at rpslizardspock.RpsLizardSpock.main(RpsLizardSpock.java:73) 
Java Result: 1 
+0

처음에는 'while (goAgain)'이어야하며 말 그대로 yes와 no에 대한 부울을 재정의 할 필요가 없습니다. – chris

+0

내가 tryed,하지만 아픈 한 번 더 시간을주지 기억할 수 없다 – TuckerB

+0

응? 스캐너가 y가 참이고 n이 거짓이라는 것을 어떻게 알 수 있습니까? – kirbyquerby

답변

1

일반적으로 Scanner을 사용할 때는 항상 next()을 호출하거나 항상 nextLine()을 호출하는 것이 좋습니다. 이 두 가지를 일관되게 만들고 할당 문제를 수정하고 y을 비교하면 코드가 올바르게 작동합니다.

import java.util.Scanner; 
import java.util.Random; 
public class RpsLizardSpock { 
    public static void main(String[] args) { 

     String userChoice; 
     boolean goAgain = true; 

     Scanner sc = new Scanner(System.in); 
     Random ra = new Random(); 
     while (goAgain) { 

      System.out.println("Welcome to Rock, Paper, Scissors, Lizard, Spock\n\n" 
        + "Please make a Choice: "); 
      userChoice = sc.next(); 

      String ucConv = userChoice.toUpperCase(); 

      System.out.println("You Chose: " + userChoice); 

      int cpuChoice = ra.nextInt(5) + 1; 

      if ((cpuChoice == 1) && (((ucConv.equals("LIZARD"))) || ((ucConv.equals("SCISSORS"))))) { 
       System.out.println("\n\nComputer chose Rock, You Lose"); 
      } else if ((cpuChoice == 1) && (((ucConv.equals("PAPER"))) || ((ucConv.equals("SPOCK"))))) { 
       System.out.println("\n\nComputer chose Rock, You Win"); 
      } else if ((cpuChoice == 2) && (((ucConv.equals("SPOCK"))) || ((ucConv.equals("ROCK"))))) { 
       System.out.println("\n\nComputer chose Paper, You Lose"); 
      } else if ((cpuChoice == 2) && (((ucConv.equals("SCISSORS"))) || ((ucConv.equals("LIZARD"))))) { 
       System.out.println("\n\nComputer chose Paper, You Win"); 
      } else if ((cpuChoice == 3) && (((ucConv.equals("LIZARD"))) || ((ucConv.equals("PAPER"))))) { 
       System.out.println("\n\nComputer chose Scissors, You Lose"); 
      } else if ((cpuChoice == 3) && (((ucConv.equals("SPOCK"))) || ((ucConv.equals("ROCK"))))) { 
       System.out.println("\n\nComputer chose Scissors, You Win"); 
      } else if ((cpuChoice == 4) && (((ucConv.equals("SPOCK"))) || ((ucConv.equals("PAPER"))))) { 
       System.out.println("\n\nComputer chose Lizard, You Lose"); 
      } else if ((cpuChoice == 4) && (((ucConv.equals("SCISSORS"))) || ((ucConv.equals("ROCK"))))) { 
       System.out.println("\n\nComputer chose Lizard, You Win"); 
      } else if ((cpuChoice == 5) && (((ucConv.equals("ROCK"))) || ((ucConv.equals("SCISSORS"))))) { 
       System.out.println("\n\nComputer chose Spock, You Lose"); 
      } else if ((cpuChoice == 5) && (((ucConv.equals("PAPER"))) || ((ucConv.equals("LIZARD"))))) { 
       System.out.println("\n\nComputer chose Spock, You Win"); 
      } else if ((cpuChoice == 1) && (ucConv.equals("ROCK"))) { 
       System.out.println("\n\nComputer chose Rock also, Draw"); 
      } else if ((cpuChoice == 2) && (ucConv.equals("PAPER"))) { 
       System.out.println("\n\nComputer chose Paper also, Draw"); 
      } else if ((cpuChoice == 3) && (ucConv.equals("SCISSORS"))) { 
       System.out.println("\n\nComputer chose Scissors also, Draw"); 
      } else if ((cpuChoice == 4) && (ucConv.equals("LIZARD"))) { 
       System.out.println("\n\nComputer chose Lizard also, Draw"); 
      } else if ((cpuChoice == 5) && (ucConv.equals("SPOCK"))) { 
       System.out.println("\n\nComputer chose Spock also, Draw"); 
      } 
      System.out.println("\n\n Would you like to play again? y/n"); 
      goAgain = sc.next().charAt(0) == 'y'; 
     } 
    } 
} 
+0

내가 tryAfter 때 goAgain = sc.next() 나는 오류가 문자열에 대한 부울 때문에 실패했다 계속 맹세 수 있습니다. 그러나 어떤 이유에서이 시간에 일했는지 – TuckerB

+0

@TuckerB, 어떻게 전화를하는지 자세히 살펴보십시오. 나는'sc.next()'를 사용하지 않고 다른 것을한다. – merlin2011

+0

사실 문제가 제대로 작동하지 않습니다. 처음에는 눈에 띄지 않지만 어떻게되는지는 "n"을 선택하면 종료되지만 "y"를 선택하면 프로그램이 모든 스캐너를 완전히 우회하여 " 두 번째로 "y"를 선택하면 다시 재생할 수 있습니다.그러나 "n"을 선택하면 다시 종료됩니다. – TuckerB

2

Scanner.nextBoolean()가 "true"또는 "false", "Y"하지 또는 "N"를 찾습니다. 대신이 라인을 따라

시도 뭔가 : 그들은 Y를 입력하면

goAgain=sc.next().equalsIgnoreCase("y"); 

이 방법은, goAgain 진실하게는, 그렇지 않으면 거짓이된다.

또한 chris가 언급했듯이 =는 할당을 의미합니다. 또한 goAgain에 값을 지정하지 않았습니다. 따라서, 당신이 그렇게

boolean goAgain=true;//true so that you can enter the loop in the first place 

같이하고 루프 부울에 값을 할당해야합니다, 당신은 말 그대로

while(goAgain){...} 

마지막으로 (내가 다시 가고 싶은 동안), 사용하지 않는 싶은 말 nextLine()은 nextInt() 및 next()와 같은 다른 것들과 함께 사용됩니다. nextLine()을 next()로 바꾸는 것이 좋습니다. 단 하나의 단어 만 묻기 때문입니다.

관련 문제