2015-12-22 4 views
1

Этот код будет вводиться пользователем с консоли и перейти в одно из двух мест в зависимости от того, является ли вход целым или нет. Исключение ловят, а затем обрабатывают, читая его снова, чтобы вытащить его из потока. (не уверен, что сканер считается потоком, но я знаю, что без input.next() он никогда не покинет этот раздел).Как выйти из цикла while (java)

Так что я хочу знать, как я могу выйти из цикла, если я попаду в исключение MismatchException с определенным вводом. Я тестировал if (bad_input == any), и оказывается, что я никогда не смогу туда попасть. Я попробовал несколько операторов печати в этом блоке, который никогда не выполнялся. Поблагодарили бы за любую помощь.

решаемые

Не знаете, как закрыть этот вопрос, но это была решена. Я неправильно использовал == для проверки двух строк. Правильный способ - использовать bad_input.equals («x»).

public static void main(String[] args){ 
    //read input from console 
    Scanner input = new Scanner(System.in); 

    boolean loop = true; 

    while(loop){ 
    //inputting "1 2 d 1" will evaluate each term separately and output at once 
    try{ 

     //choice = console input only in INTEGER 
     int choice = input.nextInt(); 
     System.out.println("Input was " + choice); 

    } catch (InputMismatchException ex){ 
     //here if input != INTEGER 

     String bad_input = input.next(); 
     System.out.println("Bad Input: " + bad_input); 

     //need to figure out how to exit loop!! 
     if(bad_input == "x"){ 
      loop = false; 
      return; 
     } 
     continue; 
    } 
    } 
} 
+3

Используйте перерыв вместо продолжения см http://stackoverflow.com/questions/462373/difference-between-break-and-continue-statement –

+0

Продолжить есть для если «плохой вход» является то, кроме условия выхода «x». Я хочу, чтобы он продолжал итерацию, пока я не получу «х». –

ответ

2

В Java сравнение строк с помощью функции равно "==" не может работать

Смените

if (bad_input == "x") { 
    loop = false; 
    return; 
} 

К

if (bad_input.equals("x")) { 
    loop = false; 
    return; 
} 
+0

Это одно. Большое спасибо! –

+0

Можете ли вы принять ответ? –

+0

Просто сделал, еще раз спасибо. –

2

Попробуйте использовать перерыв.

if(condition) 
    break; 
1

break; немедленно выйдет из цикла. То, что вы делаете, должно также работать. Я не уверен, что вам нужен оператор if, хотя весь блок catch будет выполняться тогда и только тогда, когда вход не является целым числом.

1

Может быть, вы должны использовать equalsIgnoreCase способ.

if (bad_input.equalsIgnoreCase("x")) { 

И выйти из цикла в любое значение, то целое число, вы можете просто использовать перерыв.

catch (InputMismatchException ex) { 
       // here if input != INTEGER 

       String bad_input = input.next(); 
       System.out.println("Bad Input: " + bad_input); 

       break; 
      } 
Смежные вопросы