Ciao a tutti,
sono nuovo del forum e spero che la discussione che sto aprendo rispetti le norme previste dal regolamento.

La mia difficoltà che vorrei sottoporvi è questa. Ho sviluppato un codice che calcola gli interessi che maturano su una somma iniziale per un dato interesse e un certo numero di anni. I dati che vengono forniti in input al programma sono proprio la somma iniziale, la percentuale di interesse e il numero di anni.Il metodo leggiDouble2 permette di incamerare la somma iniziale e la percentuale d'interesse verificando che essi si trovino in un determinato range (minimo;massimo). Il metodo leggiInt legge il numero di anni di giacenza della somma iniziale.
Per acquisire i dati da tastiera ho usato la classe scanner è ho creato l'oggetto tastiera.
L'esecuzione del programma non da problemi ma il debugger di Eclipse mi segnala due warnings con la scritta "Resource leak: 'tastiera' is never closed".
Ho fatto una ricerca su internet e ho trovato che, per ovviare a questo problema, alla fine del codice bisogna 'chiudere' l'oggetto di tipo scanner con nomeoggetto.close().
Ho quindi aggiunto al codice le righe 18 e 45 tastiera.close();
In effetti i warnings scompaiono ma il il programma durante l'esecuzione va in errore e non funziona più. Mi viene segnalata la seguente eccezione:

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at prova1.leggiDouble2(prova1.java:36)
at prova1.main(prova1.java:68)

Potete aiutarmi ? Vorrei lasciare intatta o quasi la struttura del codice, come posso correggere questo tipo di problema ? Ecco il codice:

codice:
//import java.io.*;//import java.util.InputMismatchException;
import java.util.Scanner;


public class prova1 {
    
    static int leggiInt(String messaggio)//lettura numero anni di giacenza
    {
        
        System.out.print(messaggio);
        Scanner tastiera = new Scanner(System.in);
        while ( !tastiera.hasNextInt() ) 
        {
           System.out.println("Inserire un *numero INTERO*");
           tastiera.nextLine();  //consumo dato sbagliato
        }
        
        //tastiera.close();
        return tastiera.nextInt();
    }


    
    
    public static double leggiDouble2(String messaggio, double minimo, double massimo)/*lettura somma iniziale o percentuale interesse*/
    {
        double num=0;
        Scanner tastiera = new Scanner(System.in);
        
        do//controllo tipo di input
        {
            System.out.println(messaggio);
            while (!tastiera.hasNextDouble()) 
            {
              System.out.println("Inserire un numero!");
              System.out.println(messaggio);
              tastiera.nextLine();
            }
            
            num = tastiera.nextDouble();
            
            if (num < minimo || num>massimo)/*verifica se il valore inserito ricade all'interno del range prefissato*/
              System.out.println("Valore non accettabile ("+minimo+"-"+massimo+")");  
        } while (num < minimo || num>massimo);
        
        //tastiera.close();
        return num;
    }
    


    
    public static void main(String[] args) {
      // TODO Auto-generated method stub
     
     /* dati input
      *  somma iniziale
      *  percentuale di interesse annuale
      *  numero di anni deposito
      *       
      * */
      
      double sommaIniziale = 0;
      double sommaFinale = 0;
      double percentualeInteresse = 0;
      int anniDeposito = 0;
    
      
      sommaIniziale = leggiDouble2("Inserire somma iniziale: ", 100, 2000);/*chiamata a leggiDouble2*/
      percentualeInteresse = leggiDouble2("Inserire percentuale annuale di interesse: ", 2.5, 10.5);/*chiamata a leggiDouble2*/
      anniDeposito = leggiInt("Durata in anni del deposito: ");/*Chiamata a leggiInt*/
      
      sommaFinale = sommaIniziale;
      while(anniDeposito>0)
      {
          sommaFinale = sommaFinale+ sommaFinale/100 * percentualeInteresse;/*formula per il calcolo dell'interesse composto*/
          anniDeposito = anniDeposito -1;
      }
      
      System.out.println("Hai ora in banca: " + sommaFinale +" euro :)");
      
      System.out.println("Fine programma ...");
    }


}