2015-10-04 27 views
2

运行在我的主要方法,我有以下的代码片段不会发生:InputMismatchException时发生的,当我从CMD运行罐子,如果从构思

  try { 
       select = scanner.nextInt(); 
      } catch (InputMismatchException e) { 
       scanner.next(); //we should read erroneous 
       System.out.println("Error. Please input number."); 
       continue; 
      } 

我做MVN clezan安装 - >去到目标目录。并开始工作,应用 其实我输入号码,但在控制台中我看到以下消息:

D:\freelance\Новая папка\myrepository\target>java -jar palindrome-artifactId-1.0 
-SNAPSHOT.jar 
Please type your name: 
u1 
Please select menu item 
1 - suggest word, 2 - change user, 3 - my score, 4 - my word list, 5 - records, 
6 - exit 
1 
Error. Please input number. 
Please select menu item 
1 - suggest word, 2 - change user, 3 - my score, 4 - my word list, 5 - records, 
6 - exit 

当调用从理念应用(主要选择方法)我没有看到THI问题。

请帮我解决我的问题。

P.S.

充满主要方法:

public static void main(String[] args) { 
    System.out.println("Please type your name:"); 
    try (Scanner scanner = new Scanner(System.in)) { 
     scanner.useDelimiter("\n"); 
     String userName = scanner.next(); 
     Game game = new Game(userName); 
     AtomicInteger atomicInteger = new AtomicInteger(); 
     int select = 0; 
     do { 
      System.out.println("Please select menu item"); 
      System.out.println("1 - suggest word, 2 - change user, 3 - my score, 4 - my word list, 5 - records, 6 - exit"); 
      try { 
       select = scanner.nextInt(); 
      } catch (InputMismatchException e) { 
       scanner.next(); //we should read erroneous 
       System.out.println("Error. Please input number."); 
       continue; 
      } 

      switch (select) { 
       case 1: 
        System.out.print("Word:"); 
        String word = scanner.next(); 
        if (game.suggestWord(word)) { 
         System.out.println("Accepted: your score - " + game.getCurrentUserScore()); 
        } else { 
         System.out.println("Rejected: Word already exists in your list or it is not palindrome"); 
         System.out.println("Your score - " + game.getCurrentUserScore()); 
        } 
        break; 
       case 2: 
        System.out.print("Name:"); 
        String name = scanner.next(); 
        game.changeUser(name); 
        System.out.println("User changed successfully. Your score - " + game.getCurrentUserScore()); 
        break; 
       case 3: 
        System.out.println("Your score - " + game.getCurrentUserScore()); 
        break; 
       case 4: 
        System.out.println("Accepted words:"); 
        game.getCurrentUserAcceptedWords().forEach(System.out::println); 
        break; 
       case 5: 
        atomicInteger.set(1); 
        game.getScores().forEach((k, v) -> System.out.println("#" + atomicInteger.getAndIncrement() + ". name: " + k + " , score: " + v)); 
        break; 
       case 6: 
        System.out.println("Goodbye! thanks for the game"); 
        break; 
       default: 
        System.out.println("You selected nonexistent menu item. Please try one more time."); 
      } 

     } while (select != 6); 
    } 
} 
+0

你应该把更多的**放在问题**中 - 不是链接。特别是,“扫描仪”的定义和用法一直到你已经显示的片段。 – RealSkeptic

+0

@RealSkeptic主题更新 – gstackoverflow

+1

好的。你在使用Windows吗? – RealSkeptic

回答

2

你的问题很可能是您的分隔符。它正在寻找\n,但在Windows上,每行以\r\n结尾。所以你得到的用户名可能是"u1\r",虽然你没有看到\r(检查它的长度),并且你输入的数字被读为"1\r",它不能作为数字进行分析。

我猜你在IDE中的模拟控制台解释你按返回只是\n,这就是为什么它在那里工作。

因此请改变您的分隔符,而不是\n,以\r?\n。分隔符是一个正则表达式,这意味着“可选的回车符,后跟一个换行符”。