¿Escáner Java sin línea encontrada y luego el escáner cerró el error?

Tengo un código Java que solicita la entrada del usuario y luego almacena estos datos en una variable de cadena. La siguiente función es parte de una clase llamada 'número' y se llama en la función principal.

        public static void setVal(int i){

    Scanner readIn = new Scanner(System.in);
    //while (readIn.hasNextLine()){
        str = readIn.nextLine();

        numCheck = false;

        if (i == 1){
            while (!numCheck){

                if (str.contains(" ")){
                    System.out.println("Please input a single item.");
                    str = readIn.nextLine();
                }
                else if (!isNumeric(str)){
                    System.out.println("Please input a valid number.");
                    str = readIn.nextLine();
                }
                else {
                    numCheck = true;
                    value = Double.parseDouble(str);
                    readIn.close();
                }
            }
            readIn.close();
        }

        else if (i == 2){
            while (!numCheck){

                if (str.contains(" ")){
                    System.out.println("Please input a single item.");
                    str = readIn.nextLine();
                }
                else if (!isNumeric(str)){
                    System.out.println("Please input a valid number.");
                    str = readIn.nextLine();
                }
                else {
                    numCheck = true;
                    secondV = Double.parseDouble(str);
                    readIn.close();
                }
            }
            readIn.close();
        }

        else {
            System.out.println("An error has occurred.");
        }
//  }
    readIn.close();
}

Parte de la función principal se ve así:

     number input = new number();

    for (int i = 1; i <= 2; i++){

        input.setVal(i);

        System.out.println("Now please input a second value for computing with the first.");

        input.setVal(i);

    }

Uso la misma función dos veces, pero le doy un argumento diferente para distinguir la asignación de la entrada a una variable diferente, pero cuando se ejecuta por segunda vez arroja un error de no encontrar línea.

Aplicando algún otro consejo que puede ver comentado, agregué una verificación 'hasNextLine ()' para verificar si la línea existe antes de ejecutar el código, pero esto termina en un error 'Escáner cerrado' a pesar de que invoco una nueva instancia de Escáner cada tiempo que se ejecuta la función. También he cerrado el escáner adecuadamente para garantizar la minimización de errores.

No tengo idea de lo que está sucediendo, ya que puedo crear un escáner en la función principal y llamar a '.nextLine ()' tantas veces como sea necesario sin error, pero cuando vuelvo a llamar a través de un método de clase, recibo estos errores.

Cualquier ayuda se agradece, gracias por adelantado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta