Grazie per rapidità e la precisione della risposta.
Ancora non conosco il significato di "metodo statico" e "lavorazione per oggetti". Mi piacerebbe chiedertelo ma temo di andare fuori dal contesto del thread.
Ho pensato di implentare la prima soluzione, cioè istanzio l'oggetto Scanner nel main e passo il riferimento tastiera agli altri metodi. I warning così non compaiono più e non è stato neanche necessario usare il metodo tastiera.close();
Sotto il codice modificato seguendo la tua indicazione, grazie ancora andbin:
codice:
//import java.io.*;
//import java.util.InputMismatchException;
import java.util.Scanner;
public class prova1 {
static int leggiInt(String messaggio, Scanner tastiera)//lettura numero anni di giacenza
{
System.out.print(messaggio);
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, Scanner tastiera)/*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) {
Scanner tastiera = new Scanner(System.in);
// 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, tastiera);/*chiamata a leggiDouble2*/
percentualeInteresse = leggiDouble2("Inserire percentuale annuale di interesse: ", 2.5, 10.5, tastiera);/*chiamata a leggiDouble2*/
anniDeposito = leggiInt("Durata in anni del deposito: ", tastiera);/*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 ...");
}
}