PDA

Visualizza la versione completa : [JAVA] problema input


bobix78
25-10-2004, 19:45
Se provo ad eseguire:

BufferedReader in1= new BufferedReader(new InputStreamReader(System.in));
String s1;
c_Nomefile = s1.substring(0,s1.lastIndexOf("."));

Ottengo l'eccezione: s1 potrebbe non essere stata inizializzata. Perchè?

LeleFT
25-10-2004, 19:47
Perchè, effettivamente, non è inizializzata! L'hai solamente dichiarata... ma manca l'inizializzazione. :)


Ciao. :ciauz:

bobix78
25-10-2004, 19:58
ma se faccio


s1=""

come fa s1 a contenere l'input da tastiera?

LeleFT
25-10-2004, 20:00
Beh... inizializzala con l'input da tastiera:


try {
BufferedReader in1= new BufferedReader(new InputStreamReader(System.in));
String s1 = in1.readLine();
c_Nomefile = s1.substring(0,s1.lastIndexOf("."));
} catch (Exception e) { e.printStackTrace(); }


Ciao. :ciauz:

bobix78
25-10-2004, 20:09
Poichè le stringhe da leggere da tastiera sono 2, come faccio a far capire al compilatore che se digito invio devo passare alla lettura della seconda stringa?

bobix78
25-10-2004, 20:28
Ora ho un altro problema: ho eseguito:


try {
System.out.print("Servizio principale: ");
BufferedReader in1= new BufferedReader(new InputStreamReader(System.in));
String c_Nomefile1 = in1.readLine();
System.out.print("Servizio da comporre: ");
BufferedReader in2= new BufferedReader(new InputStreamReader(System.in));
String c_Nomefile2 = in2.readLine();
c_Nomefile = c_Nomefile1.substring(0,c_Nomefile1.lastIndexOf(".")) + c_Nomefile2; //riga incriminata
} catch (Exception e) { e.printStackTrace(); }

System.out.println(c_Nomefile);

In compilazione non dà problemi; in esecuzione mi viene sollevata questa eccezione:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at Client.main(Client.java:32)

Come mai?

LeleFT
25-10-2004, 23:54
Rispondo prima al tuo primo quesito, poi al secondo:

Per leggere più di un valore devi rieseguire più volte l'istruzione


String c_Nomefile2 = in2.readLine();

Per esempio, la puoi inserire in un ciclo for, while, do/while... Oppure puoi usare due variabili (se ti servono entrambi i valori "contemporaneamente"), oppure un array di stringhe... le soluzioni sono molteplici e dipendono da quello che devi fare.

Per la seconda domanda: il problema può sorgere se nella stringa non hai inserito nessun carattere "."
Se non c'è quel carattere, il metodo lastIndexOf() ritorna -1, quindi l'espressione prende una sottostringa che va dal carattere in posizione 0 al carattere in posizione -1 (il che non esiste).
Devi gestire tu questo caso, controllando che il carattere "." esista.


Ciao. :ciauz:

Loading