Como fazer Scanner com precauções? JAVA

A função têm de ler um int de 1 a 5, mas se não for de 1 a 5 vai fazer print de uma mensagem de erro. Se for de 1 a 5 faz print do numero dado pelo utilizador.

 public static int lerInt (Scanner sc) {
	  boolean error;
	  int num = 0;
	  
	  System.out.println("Selecione um numero de 1 a 5");
	  
	  do {
		  num = sc.nextInt();
		  error = num != 1 && num != 2 && num != 3 && num != 4 && num != 5; 
		  
		  if(error) {
			  System.out.println("Numero invalido");
		  } else if (num == 1) {
			  num = num;
		  } else if (num == 2) {
			   num = num;
		  } else if (num == 3) {
			   num = num;
		  } else if (num == 4) {
			   num = num;
		  } else if( num == 5) {
                          num = num;
                  }
	  } while(error);
	  
	  sc.close();
	  return num;
  }

Qual o motivo de tanto if-else?
Você recebeu o Scanner por parâmetro, então não deveria fechar ele dentro desse método.
Além do mais, se o seu Scanner está lendo o System.in, ele nunca deveria ser fechado.

Não acha mais simples fazer assim?

public static int lerInt (Scanner sc) {
	boolean error;
	System.out.println("Selecione um numero de 1 a 5");
	do {
		int num = Integer.parseInt(sc.nextLine());
		error = num < 1 || num > 5; 
		if (error) {
			System.out.println("Numero invalido");
		}
	} while(error);
	return num;
}

Ha algum tempo criei uma classe StdIO que facilita esse tipo de implementação.

Usando seu exemplo, bastaria escrever:

int valor = StdIO.readInt("Selecione um numero de 1 a 5", numero -> numero >= 1 && numero <= 5);
1 curtida