Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [JAVA] problema input

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    214

    [JAVA] problema input

    Se provo ad eseguire:
    codice:
    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è?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    214
    ma se faccio

    codice:
    s1=""
    come fa s1 a contenere l'input da tastiera?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Beh... inizializzala con l'input da tastiera:
    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(); }
    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    214
    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?

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    214
    Ora ho un altro problema: ho eseguito:

    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);
    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?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Rispondo prima al tuo primo quesito, poi al secondo:

    Per leggere più di un valore devi rieseguire più volte l'istruzione
    codice:
    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.
    "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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.