Objetos de escáner en métodos y NoSuchElementException [duplicado]

Esta pregunta ya tiene una respuesta aquí:

java.util.NoSuchElementException - Escáner que lee la entrada del usuario 3 respuestas

Realmente he tratado de encontrar la respuesta a través de los hilos, pero todavía espero obtener información.

El código a continuación es de mal estilo, creo, pero no sé por qué me disparó unjava.util.NoSuchElementException después de ingresar el número, ya que hago dos objetos Scanner para dos métodos y debería poder comenzar una nueva entrada. Y si borro elinput.close() en inputAndPrintNumber (), funciona y se compila correctamente. Realmente espero saber por qué y cómo solucionarlo si todavía utilizo dos Scanner obj y sin borrar elinput.close() si es posible.

import java.util.*;
public class t{

public static void main(String [] args){
    inputAndPrintNumber();
    inputAndPrintString();
}

public static void inputAndPrintNumber(){
    Scanner input = new Scanner(System.in);
    String s = input.nextLine();        
    System.out.print(s);        
    input.close();
}

public static void inputAndPrintString(){
    Scanner input2 = new Scanner(System.in);
    int a = input2.nextInt();       
    System.out.print(a);
}
}

¿Ni siquiera estoy seguro de si el siguiente código es mejor o alguna idea mejor?

import java.util.*;

public class t{
public static Scanner input = new Scanner(System.in);
public static void main(String [] args){
    inputAndPrintNumber();
    inputAndPrintString();  
    input.close();
}

public static void inputAndPrintNumber(){
    String s = input.nextLine();        
    System.out.print(s);
}

public static void inputAndPrintString(){
    int a = input.nextInt();        
    System.out.print(a);
}
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta