2013-05-07 4 views
1

Я пытаюсь сделать цикл while, который предлагает пользователю повторно вводить данные, если они используют недопустимую запись. В моей программе я прошу пользователя ввести номер (0-3), поэтому, если они вводят что-то другое, кроме того, я хочу, чтобы появилось сообщение об ошибке, попросив их повторно ввести свои данные. Я не знаю, что я делаю неправильно в своей петле. Независимо от того, что я вхожу, я всегда получаю сообщение об ошибке.While Loop issue (Java)

String itemChoice = JOptionPane.showInputDialog(null, itemList); 
    itemChoiceNum = Integer.parseInt(itemChoice); 

    //test to make sure the input is valid 
    while (itemChoiceNum != 0 || itemChoiceNum != 1 || itemChoiceNum != 2 || itemChoiceNum != 3) { 
     JOptionPane.showMessageDialog(null, "Sorry that's not a valid choice. Please start again."); 
     itemChoice = JOptionPane.showInputDialog(null, itemList); 
    } 

NumberFormatException

while (itemChoiceNum != 0 && itemChoiceNum != 1 && itemChoiceNum != 2 && itemChoiceNum != 3) { 
     try { 
      JOptionPane.showMessageDialog(null, "Sorry that's not a valid choice. Please start again."); 
             itemChoice = JOptionPane.showInputDialog(null, itemList); 
             itemChoiceNum = Integer.parseInt(itemChoice); 
     } 

     catch (NumberFormatException itemChoiceNum) { 
      JOptionPane.showMessageDialog(null, "Sorry that's not a valid choice. Please start again."); 
     } 

Ошибка

Exception in thread "main" java.lang.NumberFormatException: For input string: "f" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:492) 
    at java.lang.Integer.parseInt(Integer.java:527) 
    at VendingClass.displayVend(VendingClass.java:82) 
    at VendingMachineDemo.main(VendingMachineDemo.java:12) 

ответ

6

Ваша логика неверна. Всегда верно, что выбор не 0 или не 1 или не 2; вы хотите «и» с оператором &&.

while (itemChoiceNum != 0 && itemChoiceNum != 1 && itemChoiceNum != 2 && itemChoiceNum != 4) { 
+1

Это было! Спасибо! –

+0

Последующие действия, есть ли способ показать сообщение об ошибке, если пользователь вводит строку? Когда я вставляю строку, программа вылетает из строя. –

+0

Поймать 'NumberFormatException', что' Integer.parseInt' выдает и показывает пользователю диалоговое окно с соответствующим сообщением об ошибке. – rgettman

1

Использование должны && вместо || в то время как condition.As из теперь она всегда возвращает True.