Cuando se utiliza in.close(); de la clase Scanner?

publicado por: Anonymous

Estoy intentando compilar el programa para saber si es par o impar y me aparece un error “Resource leak: input never close” , donde es recomendable cerrar el Scanner?

package pares;

import java.util.Scanner;

public class Pares {


public static void main(String[] args) {

    int numero;
    Scanner input = new Scanner(System.in);

    System.out.println("introduzca un numero");
    numero = input.nextInt();

    if(esPar(numero)){
        System.out.println("el numero"+numero+"el numero es par." );
    } else {
        System.out.println("el numero"+numero+"el numero es impar.");
    }
} // if 
    public static boolean esPar( int numero){
      if( numero % 2 == 0 )
          return true;
      else{
          return false;
      }
    }



}

solución

Lo que debes hacer es cerrar el Scanner, el cual por dentro cerrará el recurso System.in. Si usas Java 7 o superior, puedes usar el try-with-resources:

try (Scanner input = new Scanner(System.in)) {
    System.out.println("introduzca un numero");
    numero = input.nextInt();
    //resto del código del método main...
}

En caso de usar Java 6 o inferior, debes llamar al método Scanner#close manualmente. La mejor manera de hacer esto es dentro de un bloque try-finally:

Scanner input = null;
try {
    input = new Scanner(System.in)
    System.out.println("introduzca un numero");
    numero = input.nextInt();
    //resto del código del método main...
} catch (Exception e) {
    //manejar la excepción
} finally {
    if (input != null) {
        input.close();
    }
}
Respondido por: user227

Leave a Reply

Your email address will not be published. Required fields are marked *