2014-12-15 1 views
-2

Я в основном пытаюсь проверить, чтобы вы могли ввести Integer. Это то, что у меня есть на данный момент, но если я набираю буквы, он проходит через switch и просто оставляет результат пустым..hasNextInt() в операторе switch

Я хочу, чтобы, если что-то, кроме целого числа, будет введено в default в коммутаторе.

Любая помощь будет отличной. Благодаря!

while(loop && kb.hasNextInt()) 
{ 

    choice = kb.nextInt(); 
    switch(choice) 
    { 
    case 1 : 
      language = "FRENCH"; 
      loop = false; 
      break; 
    case 2 : 
      language = "GERMAN"; 
      loop = false; 
      break; 
    case 3 : 
      language = "SPANISH"; 
      loop = false; 
      break; 
    default : 
      System.out.println("That is not a correct choice. Please try again!"); 
      break; 

    } 
} 

ответ

0

Это потому, что письмо заставит вашего while(loop && kb.hasNextInt()) быть false. Я предлагаю поставить if с hasNextInt() в цикле while.


Пример (используя while петлю вместо if заявления действительно пытаются получить номер):

while(loop) 
{ 
    // validate int using while loop 
    while(!kb.hasNextInt())        
    { 
     System.out.println("you must enter a number! "); 
     kb.next(); 
    } 

    choice = kb.nextInt(); 

    switch(choice) 
    { 
    case 1 : 
      language = "FRENCH"; 
      loop = false; 
      break; 
    case 2 : 
      language = "GERMAN"; 
      loop = false; 
      break; 
    case 3 : 
      language = "SPANISH"; 
      loop = false; 
      break; 
    } 
} 

System.out.println("Thank You " + studentID + " you have been registered for " + language); 
+0

Если я ставлю, если заявление, в то время цикла, то, что привычка цикл так, может быть, я должен поставить еще один цикл в то время как цикл while? Может быть, есть лучший способ, который по-прежнему использует операторы Switch по умолчанию? – shallowtek

+0

Использование другого WHILE LOOP внутри основного WHILE LOOP исправляет проблему, но это означает, что проверка типа данных не использует значение DEFAULT в SWITCH. У меня есть отдельный S.O.P, говорящий, что есть ошибка. Ну, я полагаю, это работает. Спасибо, что посоветовал заявление IF. – shallowtek

1

Если следующий вход не является целым числом, затем .hasNextInt() вернется false, и поэтому цикл закончится раньше.

Если вы хотите разрешить ввод текста и ответить на него, то вам нужно читать построчно, текст вместо цифр, и разобрать строку чтения с Integer.parseInt. Если строка не может быть разобрана, вы получите NumberFormatException. Вы можете поймать его и обработать соответствующим образом.

while (loop && scanner.hasNextLine()) { 
     String line = scanner.nextLine(); 
     try { 
      choice = Integer.parseInt(line); 
     } catch (NumberFormatException e) { 
      System.out.println("That is not an integer. Please try again!"); 
      continue; 
     } 

     switch (choice) { 
      case 1: 
       language = "FRENCH"; 
       loop = false; 
       break; 
      case 2: 
       language = "GERMAN"; 
       loop = false; 
       break; 
      case 3: 
       language = "SPANISH"; 
       loop = false; 
       break; 
      default: 
       System.out.println("That is not a correct choice. Please try again!"); 
       break; 
     } 
    } 
0

Этот код будет дуть, прежде чем он начинает даже если пользователь не вошел в число как в то время как требуется kb.hasNextInt(), чтобы быть правдой (есть много) даже бежать.

Что я делаю то, что я обычно ставлю проверку вокруг, где я получаю вход:

int choice; 
Boolean retry = null; 
while(retry == null) { 
    try{ 
     String input = scanner.nextLine(); 
     choice = Integer.parseInt(input); 
     retry = false; 
    }catch(NumberFormatException e){ 
     System.out.println("Please enter a number from 1 to 4."); 
    } 
} 

switch(choice){ 
    case 1: 
     // Do stuff 
     break; 
    case 2: 
     // Do stuff 
     break; 
    case 3: 
     // Do stuff 
     break; 
    case 4: 
     // Do stuff 
     break; 
    default: 
     System.out.println("Something went wrong!"); 
}