как повторно попытаться / поймать исключение несоответствия ввода без попадания в бесконечный цикл - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь получить информацию от пользователя, чтобы построить сетку для игры плачущего 2-го рудника, процесс проходит довольно гладко, когда я передаю действительные значения в сканер, но когда я пытаюсь сделать недопустимые вещи, он проходит через бесконечный цикл, дажеблок try - это попытка с ресурсами, которые должны закрывать сканер при каждой новой попытке, кажется, что он не закрывает его, когда бесконечно печатает строку в улове

int gridSize = 0;
    System.out.println("how much do you want the grid's size");
    try (Scanner scanner = new Scanner(System.in)) {
        while (gridSize == 0) {
            gridSize = scanner.nextInt();
            scanner.next();
        }
    } catch (NoSuchElementException e) {
        System.out.println("try again");
    }

1 Ответ

0 голосов
/ 20 октября 2018

Вы ловите неправильное исключение - если ввод не является int, будет выброшено InputMismatchException.Но независимо от этого, это можно сделать проще, используя hasNextInt():

try (Scanner scanner = new Scanner(System.in)) {
    while (!scanner.hasNextInt()) {
        System.err.println("Try again, this time with a proper int");
        scanner.next();
    }
    gridSize = scanner.nextInt();
} 
...