Как мне убедиться, что Scanner hasNextInt () запрашивает новый ввод?

Новый программист здесь. Это, наверное, очень простой вопрос, но, тем не менее, он меня озадачил.

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

public static int goodInput () {
    Scanner input = new Scanner (System.in); //construct scanner
    boolean test = input.hasNextInt(); //set a sentinel value
    while (test == false) { //enter a loop until I actually get an integer
        System.out.println("Integers only please"); //tell user to give me an integer
        test = input.hasNextInt(); //get new input, see if it's an integer
    }
    int finalInput = input.nextInt(); //once i have an integer, set it to a variable
    input.close(); //closing scanner
    return finalInput; //return my integer so I don't have to mess around with hasNextInt over there
}

Это кажется сломанным на нескольких уровнях, но я не совсем уверен, почему.

Если я введу целочисленное значение, например 0 или 1, когда меня впервые попросят ввести, он должен полностью пропустить цикл. Но вместо этого он входит в цикл и печатает «Только целые числа, пожалуйста». Хуже того, он не запрашивает ввод, пока я там, а просто печатает эту строку несколько раз.

Я понимаю, что последняя проблема, вероятно, связана с проблемами маркеров, но я не обязательно знаю, как их решить; закрытие, а затем повторное открытие сканера заставляет Eclipse выдавать мне сообщение об «дублирующих объектах», просто назначая старый ввод для переменной String мусора, которая никогда не используется, говорит мне, что «во время выполнения строка не найдена», и у меня недостаточно опыта думать о других способах получить новый вклад.

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

Пожалуйста помоги? Извините, если это старый вопрос; пробовал смотреть на прошлые вопросы, но, похоже, ни у одного из них нет той же проблемы, что и у меня.

Ответы на вопрос(2)

Ваш ответ на вопрос