A parer mio ci sono un paio di errori di logica.
Il primo è nel fatto che appena leggi la risposta se si vuole inserire un indirizzo, devi controllare la risposta subito e ciclare sull'indirizzo solamente in base a quest'ultima.
Poi la condizione di permanenza del while, la variabile done, deve essere cambiata a true solamente se l'indirizzo è valido. Se vale true esce, se vale false cicla.
codice:
System.out.println("VUOI INSERIRE L'INDIRIZZO? S per si N per no");
InputStreamReader input = new InputStreamReader (System.in);
BufferedReader tastiera = new BufferedReader (input);
String testo = new String();
try {
testo = tastiera.readLine();
}catch(Exception ex){
System.err.println("Impossibile leggere da tastiera: ");
System.err.println(ex.getMessage());
System.exit(1);
}
// Se risponde si allora catturo l'indirizzo
if("S".equalsIgnoreCase(testo)){
boolean done = false;
// Ciclo finchè non viene inserito un indirizzo valido
while (!done){
String indirizzo = new String();
System.out.println("inserisci indirizzo MAX 25 CARATTERI");
try {
indirizzo = tastiera.readLine();
}catch(Exception ex){
System.err.println("Impossibile leggere da tastiera: ");
System.err.println(ex.getMessage());
System.exit(1);
}
if (indirizzo.length() > 25){
System.out.println("IL NUMERO DEI CARATTERI PER L'INDIRIZZO è");
System.out.println("SUPERIORE AL CONSENTITO PER QUESTO L'INDIRIZZO");
System.out.println("VERRA' IGNORATO");
indirizzo = "";
// L'indirizzo non è valido, quindi imposto la condizione del ciclo in modo da continuare
done = false;
}
else{
// La lunghezza dell'indirizzo è corretta
System.out.println("Indirizzo valido.");
//voce.setIndirizzo(indirizzo);
// L'indirizzo è valido, quindi imposto la condizione del ciclo in modo da uscire
done = true;
}
}
}
// Alla fine dell'applicazione devo chiudere Stream e Buffer prima di uscire.
try{
if(tastiera != null) tastiera.close();
if(input != null) input.close();
}catch(Exception ex){
System.err.println("Errore di sistema.");
System.err.println("Impossibile chiudere Stream e Buffer");
System.exit(1);
}
System.out.println("Arrivederci.");
System.exit(0);