Бесконечный цикл Java, принимая вход

1

У меня есть эта проблема с циклом while здесь:

while((input = InputHandler.getInt()) != 1 && input != 2){
        if(input == InputHandler.CODE_ERROR)
            System.out.print("Input must be a number");
    }

Этот цикл while принимает вход только один раз и больше не запрашивает его, поэтому он циклически вводит этот вход, который принимается один раз все время. Что я делаю неправильно здесь, потому что для меня это действительно странно, что этот цикл улыбок работает?

Класс InputHandler:

public class InputHandler {
  public static Scanner in = new Scanner(System.in);
  public static int CODE_ERROR = -6;

  public static int getInt(){
    try{
        return in.nextInt();
    } catch(InputMismatchException e){
        return CODE_ERROR;
    }
  }
}
  • 9
    Ваш цикл закончится только тогда , когда input одновременно равны 1 и 2. Это не произойдет. Для любого значения либо input != 1 либо input != 2 будет истинным ... Я подозреваю, что вы хотите && .
  • 0
    Код, кажется, был обновлен до этого сейчас.
Показать ещё 5 комментариев
Теги:
loops
while-loop
infinite-loop

2 ответа

5
Лучший ответ

В настоящее время ваш код вводит бесконечный цикл, если в командной строке вводится не целое число. Это связано с тем, что ваш in.nextInt() исключение и оставил в сканере оскорбительное значение.

Вам нужно использовать недопустимый токен, вызвавший ваше исключение, вызвав in.next(); :

public static void main(String[] args) throws Exception {
    int input;
    while ((input = InputHandler.getInt()) != 1 && input != 2) {
        if (input == InputHandler.CODE_ERROR)
            System.out.print("Input must be a number");
    }
}

public static class InputHandler {
    public static Scanner in = new Scanner(System.in);
    public static int CODE_ERROR = -6;

    public static int getInt(){
      try{
          return in.nextInt();
      } catch(InputMismatchException e){
          in.next();  // <------------------ this should solve it
          return CODE_ERROR;
      }
    }
  }
0

Я запустил код, который работает нормально и каждый раз запрашивает ввод, и когда я выдаю 2 или 1 цикл. Вот пример кода, который я запускал: -

   package testing;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Test123 {
    public static Scanner in = new Scanner(System.in);
    public static int CODE_ERROR = -6;

    public static int getInt(){
        try{
            String in1 = in.next();
             return Integer.parseInt(in1);
            //return in.nextInt(); <-- This is leading to error
        } catch(Exception e){
            return CODE_ERROR;
        }
}

    public static void main(String[] args) {
        int input;

        while((input = Test123.getInt()) != 1 && input != 2){
            if(input == Test123.CODE_ERROR)
                System.out.print("Input must be a number");

            System.out.println("\nWrong number: "+input+" Please try again.");


            //input = Test123.getInt();
        }
    }

}

Я не понимаю, почему вы столкнулись с проблемой?

  • 1
    Состояние в while петля будет evaluted каждый раз , когда он закругляется, так что не должно быть проблемой.
  • 0
    Эван Ноулз: - отредактированный пост ... Извините за предыдущий сомнительный комментарий.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню