2016-01-14 3 views
-2

Мое приложение имеет цикл, который повторяет один и тот же выбор вариантов, пока не будет указано, что он должен выйти.Java - Сканер не может читать целые числа после цикла?

Scanner scan = new Scanner(System.in); 
while(running == true){ 
    System.out.println("Select an option (1-4):"); 
    System.out.println("1: Add an item to your store"); 
    System.out.println("2: Search for an item in your store"); 
    System.out.println("3: Remove an item from your store"); 
    System.out.println("4: Buy an item from the store:"); 
    System.out.println("5: Exit this application"); 
    int option = scan.nextInt(); 
    if(option == ... etc. 
} 

На второй итерации цикла, вставленные целое не будет принят и возвращает следующее сообщение об ошибке:

Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at storeproject.StoreProject.main(StoreProject.java:27)

+1

вы пытались использовать 'импорта java.util.Scanner;'? –

+1

@ JohnReyM.Baylen Если бы он этого не сделал, это не сработало в первый раз – miqdadamirali

+1

что вы вводите? –

ответ

0

Вы получаете эту InputMismatchException, потому что ваши войти не число, может быть, это не числовые данные, или это не целое число, потому что вы пытаетесь получить nextInt(). Надеюсь, это поможет вам!

+0

Итак, в чем же принципиальное отличие вашего кода от OP, который влияет на поведение? –

+0

Ничего особенного здесь, я просто сделал оптимизацию и гарантирую, что проблема не в коде, возможно, есть и другая причина, которая вызывает это исключение. А также я выяснил причину исключения –

+0

Так что тогда это не имеет никакого отношения к вопросу ОП. Если вам нужно уточнить, что его код верен, сделайте это в комментарии. –

0

Я думаю, что знаю, что происходит.

Следующий int должен иметь точно число и только число. любые нецелые значения, альфа и пунктуации до или после ввода дадут вам эту ошибку. Я попытался это:

Код:

public class ScannerTest { 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     while(true){ 
      System.out.println("Select an option (1-4):"); 
      System.out.println("1: Add an item to your store"); 
      System.out.println("2: Search for an item in your store"); 
      System.out.println("3: Remove an item from your store"); 
      System.out.println("4: Buy an item from the store:"); 
      System.out.println("5: Exit this application"); 
      int option = scan.nextInt(); 
      System.out.println(option); 
     } 
    } 
} 

Выход:

5 
5 
Select an option (1-4): 
1: Add an item to your store 
2: Search for an item in your store 
3: Remove an item from your store 
4: Buy an item from the store: 
5: Exit this application 
6 
6 
Select an option (1-4): 
1: Add an item to your store 
2: Search for an item in your store 
3: Remove an item from your store 
4: Buy an item from the store: 
5: Exit this application 
5. 
Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Scanner.java:864) 
    at java.util.Scanner.next(Scanner.java:1485) 
    at java.util.Scanner.nextInt(Scanner.java:2117) 
    at java.util.Scanner.nextInt(Scanner.java:2076) 
    at ScannerTest.main(ScannerTest.java:17) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

Process finished with exit code 1 
+1

* "... любые нецелые значения, ** пробелы **, альфа и пунктуации ..." *. Пространства на самом деле прекрасны. –

+0

@AdrianShum: Спасибо, удалены пробелы – Cripto

Смежные вопросы