¿Cómo me aseguro de que Scanner hasNextInt () solicite una nueva entrada?

Nuevo programador aquí. Esta es probablemente una pregunta realmente básica, pero de todos modos me desconcierta.

Lo que estoy tratando de hacer es escribir un método que proporcione solo una entrada entera para poder usar esa entrada en mi programa principal sin tener que perder el tiempo con entradas no enteras. Sin embargo, incluso escribir el método para hacerlo en su propio método parece ser problemático.

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
}

Esto parece estar roto en múltiples niveles, pero no estoy realmente seguro de por qué.

Si ingreso un valor entero como 0 o 1 la primera vez que se me pide una entrada, debería omitir el ciclo por completo. Pero, en cambio, entra en el bucle e imprime "Solo enteros, por favor". Peor aún, en realidad no pide información mientras estoy allí, y solo imprime esa línea repetidamente.

Entiendo que el último problema probablemente se deba a problemas con los tokens, pero no estoy necesariamente seguro de cómo resolverlos; al cerrar y volver a abrir el escáner, Eclipse me molesta sobre "objetos duplicados", simplemente asignando la entrada anterior a una variable de cadena de basura que nunca se usa, me dice que "No se encontró línea" en tiempo de ejecución, y no tengo suficiente experiencia pensar en otras formas de obtener nuevos aportes.

Incluso una vez que esté resuelto, necesito encontrar alguna forma de evitar entrar en el bucle en el caso de tener un número entero. Realmente no entiendo por qué las entradas enteras entre el bucle para comenzar, así que no estoy seguro de cómo esto sería posible.

¿Por favor ayuda? Lo siento si esta es una vieja pregunta; Intenté mirar preguntas pasadas pero ninguna de ellas parece tener el mismo problema que yo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta