Se provo ad eseguire:
Ottengo l'eccezione: s1 potrebbe non essere stata inizializzata. Perchè?codice:BufferedReader in1= new BufferedReader(new InputStreamReader(System.in)); String s1; c_Nomefile = s1.substring(0,s1.lastIndexOf("."));
Se provo ad eseguire:
Ottengo l'eccezione: s1 potrebbe non essere stata inizializzata. Perchè?codice:BufferedReader in1= new BufferedReader(new InputStreamReader(System.in)); String s1; c_Nomefile = s1.substring(0,s1.lastIndexOf("."));
Perchè, effettivamente, non è inizializzata! L'hai solamente dichiarata... ma manca l'inizializzazione.
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
ma se faccio
come fa s1 a contenere l'input da tastiera?codice:s1=""
Beh... inizializzala con l'input da tastiera:
Ciao.codice: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(); }
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
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?
Ora ho un altro problema: ho eseguito:
In compilazione non dà problemi; in esecuzione mi viene sollevata questa eccezione:codice: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);
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at Client.main(Client.java:32)
Come mai?
Rispondo prima al tuo primo quesito, poi al secondo:
Per leggere più di un valore devi rieseguire più volte l'istruzione
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.codice:String c_Nomefile2 = in2.readLine();
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.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza