2015-08-12 2 views
0

Так что я в настоящее время имеем дело с этим [иметь в виду, я вырезал большую часть кода из причин это довольно долго]Плохая обработка исключений? Программа продолжает цикл?

int choice = 0; 
    while (choice != 7){ 

    System.out.println("--- Mathematical Calculator ---"); 
    System.out.println(""); 
    System.out.println("Pick an operation from the list - Use nos. 1 to 7"); 
    System.out.println("1) Multiplication"); 
    System.out.println("2) Division"); 
    System.out.println("3) Addition"); 
    System.out.println("4) Subtraction"); 
    System.out.println("5) Find the area of a regular object"); 
    System.out.println("6) Find the volume of a regular object"); 
    System.out.println("7) Exit Program"); 

    **boolean ok = false; 
    do { 
     try{ 
      choice = userInput.nextInt(); 
      ok = true; 
     } catch (InputMismatchException e){ 
       System.out.println("Invalid input"); 
        } 
    } 
    while (ok = false);** 

    switch (choice) { 

    case 1: 

    case 2: 

    case 3: 

    case 4: 

    case 5: 

    case 6: 



case 7:    
System.out.println("Thanks for using my program"); 
      System.out.println("Program terminated"); 
      break; 





    default: System.out.println("Invalid choice"); 

     } 

    } 
    userInput.close(); 
} 

Так в настоящее время, когда я запустить программу и ввести то, что не является целым числом, программа выдаст следующий результат:

--- Mathematical Calculator --- 

Pick an operation from the list - Use nos. 1 to 7 
1) Multiplication 
2) Division 
3) Addition 
4) Subtraction 
5) Find the area of a regular object 
6) Find the volume of a regular object 
7) Exit Program 
Invalid input 
Invalid choice 

Over 
And over 
And over 

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

Помощь?

+0

какова двойные звездочки? проблема с копировальной пастой? или попытка выделить жирный блок? – vefthym

ответ

2

while (ok = false); должно быть while (ok == false);, или while (!ok);.

ok = false является назначением.

Кроме того, я предполагаю, что вы намеренно оставили пустые пустые вещи, но даже при этом убедитесь, что вы положили break; на каждый из них, в противном случае всегда будет выполняться опция 7.

EDIT: для бесконечного цикла вы также должны делать то, что предлагает Кевин Эше в his answer (+1).

+1

Да, вы оба были правы ... что касается дел, да, я сделал перерыв. – TheHoboMaster

3

Вы должны поймать \ п \ г с userInput.nextLine() в вашем исключении и прекращает печать навсегда, как этот

catch (InputMismatchException e){ 
     System.out.println("Invalid input"); 
     userInput.nextLine(); 
} 
+0

Работал. Я попытался поставить nextInt(); который не работал, спасибо за отзывы. – TheHoboMaster

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