andbin ha scritto:
Frank2000 ha scritto:
lo faccio tramite while(valore < 0), ma perchè non funziona?
Perché nel while ripeti solo il parseInt ma non l'input dall'utente!
E comunque non è molto buono il leggiLinea(), perché ad ogni sua invocazione crei un nuovo BufferedReader connesso a System.in.
Di BufferedReader connesso a System.in ne dovresti avere UNO solo per tutta la vita della applicazione.
Grazie. ho risolto facendo così nel main :
// l'utente inserisce il numero di sensori
do{
System.out.print("Inserire il numero di sensori: ");
numSensori = CatturaInput.leggiProssimoIntero();
} while(numSensori < 1);
System.out.println("Numero sensori inserito: " + numSensori);
e lasciando praticamente uguale la classe di prima
public class CatturaInput {
// metodo statico che consente di leggere una linea dallo standard input
// sotto forma di stringa
public static String leggiLinea(){
String appenaLetta = null;
// oggetto wrapper per rendere evoluto
// System.in e poter leggere un'intera linea
// come stringa.
BufferedReader bRead;
// inizializzo l'oggetto wrapper sopra System.in
bRead = new BufferedReader(new InputStreamReader(System.in));
// ora vado a leggere una linea da standard input
try{
appenaLetta = bRead.readLine();
}catch(IOException e){
System.out.println("Impossibile leggere da standard IO");
appenaLetta = "ERRORE DI IO";
}
return appenaLetta;
} // end metodo LeggiLinea()
// metodo statico che legge una linea dallo standard input e cerca di
// convertirla in intero
public static int leggiProssimoIntero(){
int valore = -1;
String linea = CatturaInput.leggiLinea();
// ora vado ad effettuare la traduzione in intero
try{
valore = Integer.parseInt(linea);
}catch(NumberFormatException e){
System.out.println("Impossibile tradurre in intero. Inserire di nuovo ");
System.out.println(e);
}
return valore;
} // end metodo leggiProssimoIntero()
} // end classe
Come posso risolvere il problema dell'unico buffer reader?