2017-12-10 7 views
0

저는 JAVA에 대한 멍청한 프로그래머입니다. 첫 번째 프로그램을 만들려고 노력하고 있습니다. 이 유형과 같은 여러 오류를 제거했지만이 문제를 해결할 수없는 것 같습니다. 여기 속히 내가 도움이 필요 것입니다 :java.util.InputMismatchException은 무엇을 의미합니까

오류 :

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at Main.createGame(Main.java:67) 
at Main.processCommand(Main.java:116) 
at Main.main(Main.java:40)` 
`Exception in thread "main"` 

코드 :

import java.util.Scanner; 

public class Main{

private static final String SAI = "SAI"; 
private static final String AJUDA = "AJUDA"; 
private static final String NOVO = "NOVO"; 
private static final String MAPA = "MAPA"; 
private static final String KNIGHT = "CAVALEIRO"; 
private static final String SWORDSMAN = "ESPADACHIM"; 
private static final String SPEARMAN = "LANCEIRO"; 
private static final String NORTH = "NORTE"; 
private static final String SOUTH = "SUL"; 
private static final String WEST = "OESTE"; 
private static final String EAST = "ESTE"; 
private static final String SAIR = "Obrigado por jogar. Ate a proxima."; 

public static void main(String[] args) 
    { 
      Scanner in = new Scanner(System.in); 

      Game g1 = new Game(); 

      Units u1 = new Units(); 

      String command = ""; 

      String movement = ""; 


     System.out.println("novo - Novo jogo"); 
     System.out.println("ajuda - Mostra a ajuda"); 
     System.out.println("sai - Termina a execucao do programa"); 
     System.out.print("> "); 

      while(!command.equals(SAI)) 
      { 
       command = readCommand(in); 
       movement = readMovement(in); 
       processCommand(command, movement, g1, u1, in); 
      } 

      in.close(); 
    } 

private static String readCommand(Scanner in) 
{ 
    String command; 

    command = in.next().toUpperCase(); 

    return command; 
} 

private static String readMovement(Scanner in) 
{ 
    String movement; 

    movement = in.next().toUpperCase(); 

    return movement; 
} 

private static void createGame(Game g1, Scanner in) 
{ 
    int x = in.nextInt(); 
    int y = in.nextInt(); 
    String team1 = in.next(); 
    int f1x = in.nextInt(); 
    int f1y = in.nextInt(); 
    String team2 = in.next(); 
    int f2x = in.nextInt(); 
    int f2y = in.nextInt(); 
    in.nextLine(); 
    g1.createGame(x, y, f1x, f1y, f2x, f2y, team1, team2); 
} 

private static void processCommand(String command, String movement, Game g1, Units u1, Scanner in) 
    { 
     int tempflag = 0; 

    switch (command) 
     { 
      case AJUDA: 
       if(g1.on() == false) 
       { 
       in.nextLine(); 
       System.out.println("novo - Novo jogo"); 
       System.out.println("ajuda - Mostra a ajuda"); 
       System.out.println("sai - Termina a execucao do programa"); 
       System.out.print("> "); 
       } 
       else 
       { 
        in.nextLine(); 
        System.out.println("novo - Novo jogo"); 
        System.out.println("mapa - Mostra o mapa do jogo"); 
        System.out.println("cavaleiro - Move o cavaleiro"); 
        System.out.println("espadachim - Move o espadachim"); 
        System.out.println("lanceiro - Move o lanceiro"); 
        System.out.println("ajuda - Mostra a ajuda"); 
        System.out.println("sai - Termina a execucao do programa"); 
        if((g1.turns()%2) == 0) 
        { 
         System.out.println(g1.Team1() + "> "); 
        } 
        else 
        { 
         System.out.println(g1.Team2() + "> "); 
        } 
       } 
       break; 

      case NOVO: 
        g1.stop(); 
        createGame(g1, in); 
        tempflag = (Math.abs(g1.flag1X() - g1.flag2X()) + Math.abs(g1.flag1Y() - g1.flag2Y())); 
        if(g1.altura() < 10 || g1.largura() < 10) 
        { 
         System.out.println("Mapa pequeno demais para o jogo"); 
        } 
        if(g1.flag1X() < 2 || g1.flag1Y() < 2) 
        { 
         System.out.println(g1.Team1() + " bandeira em posicao invalida " + g1.flag1X() + g1.flag1Y()); 
        } 
        if(g1.flag2X() < 2 || g1.flag2Y() < 2 || tempflag < 5) 
        { 
         System.out.printf(g1.Team2() + " bandeira em posicao invalida " + g1.flag2X() + g1.flag2Y()); 
        } 
        if(g1.Team1() == g1.Team2()) 
        { 
         System.out.println("As equipas nao podem ter o mesmo nome"); 
        } 
        else 
        { 
         g1.start(); 
         u1.knightAlive1(); 
         u1.swordsmanAlive1(); 
         u1.spearmanAlive1(); 
         u1.knightAlive2(); 
         u1.swordsmanAlive2(); 
         u1.spearmanAlive2(); 
         System.out.println("Jogo iniciado com sucesso, comeca a equipa " + g1.Team1()); 
         System.out.print(g1.Team1() + "> "); 
        } 
        break; 
+0

여기에 'java.util.InputMismatchException'이 있는데 입력이 잘못되었다는 의미입니다. 당신이 숫자를 기대하는 것처럼 당신은 하나가 아니 었습니다. 입력 순서를 확인하십시오. – janith1024

+0

InputMismatchException - 다음 토큰이 Integer 정규 표현식과 일치하지 않거나 범위를 벗어난 경우. 전화 번호를 입력하고 있습니까? – Santosh

+0

[스택 오버플로 사용자에 대한 연구 노력이 얼마나 필요합니까?] (https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users) 대답, * "많이, 어리석은 금액. 당신이 할 수 있다고 생각하는 것 이상의 것. 당신이 로프의 끝까지 도달하고 그 대답을 얻지 못한 것에 대한 고통이 당신의 질문을 게시 함으로서받은 엄청난 수치를 초과한다면, 그것은 그 시점에서 물어볼 가치가있는 좋은 질문을하기 위해 필요한 연구를 다 했으니 까! "* –

답변

-1

항상 확인해야합니다 스캐너 개체 d를 얻으려고 전화를 걸기 전에 nextXXX (type)를가집니다. esired 유형.

스택 추적은 "java.util.Scanner.nextInt (알 수없는 소스) "에 읽는 동안 예상 된 유형의 int가 아닌 다른 것을 가지고 있다고 말합니다. 이것은 createGame() 메서드 내부에서 발생합니다.이 메서드는 "NOVO"명령이 전달 되었기 때문에 호출됩니다.

이 오류를 방지하려면 스트림 내에서 다음 int를 가져 오기 전에 스캐너 hasNextInt() 메서드를 사용하십시오. I.En (hasNextInt()) {....}

+1

corr을 downvote하는 것은 멍청하다. ect는 간단히 말해 다른 곳의 질문에 대해서도 답변을 드렸습니다. 이미 다른 곳에서 응답 한 경우 내 대답에 대한 투표를 허용하지 않으며, 아래쪽 투표는 사용자에게 시각적으로 (답변을 완전히 읽지 못하는 사람에게) 대답이 잘못되었음을 나타냅니다. – javaBean007

관련 문제