Выйти из цикла do-while - PullRequest
       29

Выйти из цикла do-while

2 голосов
/ 05 марта 2019

У меня небольшая проблема с консольным приложением. Приложения должны получить числа от пользователя и добавить их в список, но если ввод «c», он должен отключиться. Я не могу понять, как проверить переменную "c" без зависания приложения с Scanner.nextLine() и выйти из цикла.

public void getNumbersFromUser() {

  Scanner scanner = new Scanner(System.in);
  int number;
  boolean flag = true;

  do{
     System.out.println("Enter a number");

     while(!scanner.hasNextInt()) {
        System.out.println("Thats not a number !");
        scanner.next();
     }
        number = scanner.nextInt();
        list.add(number);
        System.out.println(list);

  }
  while(flag);

Ответы [ 2 ]

2 голосов
/ 05 марта 2019

Один из способов сделать это - использовать Scanner.next(), который заблокирует ожидание ввода, и проверить ввод с помощью Integer.parseInt() самостоятельно:

List<Integer> list = new ArrayList<>();
Scanner scanner = new Scanner(System.in);

do {
    System.out.println("Enter a number");
    String next = scanner.next();
    if (next.equals("c")) {
        break;
    }

    try {
        int number = Integer.parseInt(next);
        list.add(number);
        System.out.println(list);
    } catch (NumberFormatException ex) {
        System.out.println("That's not a number !");
    }
} while (true);
1 голос
/ 05 марта 2019

Лучше получить ввод с помощью next(), и чтобы не добавлять библиотеки третьей части, создайте вспомогательный метод, чтобы проверить, является ли ввод числом:

Вспомогательный метод :

public static boolean isNumeric(String strNum) {
    try {
        int d = Integer.parseInt(strNum);
    } catch (NumberFormatException | NullPointerException nfe) {
        return false;
    }
    return true;
}

Использование его в цикле do / while :

Scanner scanner = new Scanner(System.in);
List<Integer> list = new ArrayList<>();
boolean flag = true;

do {
    System.out.println("Enter a number");
    String input = scanner.next();

    if(!isNumeric(input)) {
        if(!input.equals("c")) {
            System.out.println("Thats not a number !");
            continue; // will restart the loop
        }
        else break; // will exit if input is "c"
    }
    else {
        list.add(Integer.parseInt(input));
        System.out.println(list);
    }
}
while(flag);

Живой пример здесь .

...