Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    71

    Incomprensione stringhe

    Buon giorno vorrei un piccolo chiarimento su una situazione che mi sono trovato ad affrontare.
    Mi sto esercitando in java, quindi verso questo linguaggio di programmazione sto muovendo i primi passi. Ho scritto questo codice.

    codice:
    import java.io.*;
    
    
    class infosistema
    {
      public static void main(String[] argomenti)
      {
        System.out.println("Richiedi la specifica che preferisci e premi [INVIO]. \nPer uscire dal programma scrivi 'end'");  //stampa istruzioni
        
        // in 'a' prendiamo il flusso di standard input
        InputStreamReader a = new InputStreamReader(System.in);
    
    
        // sfruttiamo un BufferedReader per contenere il flusso 
        // di byte
        BufferedReader IN = new BufferedReader(a);
        
        // e convertirlo in una stringa
        String s = new String();
        String tipo = new String();
        String tmp = new String();
        // finché non si verifica la condizione di uscita
        while(s.compareTo("end")!=0)
        {
          try {
            s= IN.readLine(); // Legge il contenuto della riga
    
    
          } catch (IOException e) {
            s="ERRORE DI LETTURA";
          };
    
    
          //   String tipo; 
          //   String tmp;
          // e lo stampa
          switch (s)
          {
           case "sistema operativo":
            tipo="Sistema Operativo: ";
            tmp=System.getProperty("os.name");
           break;
          }
          System.out.println(tipo+tmp);
        }
      }
    }
    Come potete vedere nella parte finale del codice ho inserito la dichiarazione delle stringhe tmp e tipo senza dichiararle new String(). Perché se le dichiaro new string(); funzionano e se dichiaro semplicemente String tmp mi risultano come errore ovvero non inizializzate?
    La seconda forma necessita di una inizializzazione in fase di definizione per poter essere considerata funzionante?

  2. #2
    Invece di fare così
    codice:
    String tipo = new String();
    String tmp = new String();
    dichiarale semplicemente in questo modo:
    codice:
    String tipo = "";
    String tmp = "";
    questo perché comunque devono avere un valore di inizializzazione.

    Ciao.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    Quote Originariamente inviata da Shiroga Visualizza il messaggio
    Buon giorno vorrei un piccolo chiarimento su una situazione che mi sono trovato ad affrontare.
    Mi sto esercitando in java, quindi verso questo linguaggio di programmazione sto muovendo i primi passi. Ho scritto questo codice.

    codice:
    import java.io.*;
    
    
    class infosistema
    {
      public static void main(String[] argomenti)
      {
        System.out.println("Richiedi la specifica che preferisci e premi [INVIO]. \nPer uscire dal programma scrivi 'end'");  //stampa istruzioni
        
        // in 'a' prendiamo il flusso di standard input
        InputStreamReader a = new InputStreamReader(System.in);
    
    
        // sfruttiamo un BufferedReader per contenere il flusso 
        // di byte
        BufferedReader IN = new BufferedReader(a);
        
        // e convertirlo in una stringa
        String s = new String();
        String tipo = new String();
        String tmp = new String();
        // finché non si verifica la condizione di uscita
        while(s.compareTo("end")!=0)
        {
          try {
            s= IN.readLine(); // Legge il contenuto della riga
    
    
          } catch (IOException e) {
            s="ERRORE DI LETTURA";
          };
    
    
          //   String tipo; 
          //   String tmp;
          // e lo stampa
          switch (s)
          {
           case "sistema operativo":
            tipo="Sistema Operativo: ";
            tmp=System.getProperty("os.name");
           break;
          }
          System.out.println(tipo+tmp);
        }
      }
    }
    Come potete vedere nella parte finale del codice ho inserito la dichiarazione delle stringhe tmp e tipo senza dichiararle new String(). Perché se le dichiaro new string(); funzionano e se dichiaro semplicemente String tmp mi risultano come errore ovvero non inizializzate?
    La seconda forma necessita di una inizializzazione in fase di definizione per poter essere considerata funzionante?
    non riguarda solo le string ma tutti i tipi di dato. Se provi a leggerli prima di inizializzarli ti da errore. Devi essere sicuro che qualunque sia il flusso del programma la variabile abbia sempre un valore. Il problema qui lo vedo con la variabile s, per il while e le altre due nel println. Se non la inizializzassi appena entra nel while ti darebbe null pointer exception nel valutare la condizione del while. Stesso discorso per le altre due, non avresti la garanzia che tipo e tmp abbiano un valore appena arrivi alla riga System.out.println.

    Altra cosa, ricordati che le stringhe nello switch le puoi usare solo con java 7.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.