Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [JAVA] problemi con setText()

    Sto scrivendo un codice per una sorta di Applet maneggia-date, all'interno del quale c'è un tasto di controllo data che serve a controllare se la data è veritiera, posto solo una parte di codice perchè è lungo:

    codice:
        class Receiver3 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String giorno = ggStart.getText ();
    	String mese = mmStart.getText ();
    	String anno = yyStart.getText ();
    	String inDate;
    
    	inDate.setText(anno + "/" + mese + "/" + giorno);
    
    	    if (inDate == null)
    	      testoOutput.setText("Data mancante. Inserire una data in formato dd/mm/yyyy");
    
        //Impostare il formato da utilizzare come argomento del costruttore
    	    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        
    	    if (inDate.trim().length() != dateFormat.toPattern().length())
    
    	      testoOutput.setText("Formato errato. Inserire una data in formato dd/mm/yyyy");
    
    	    dateFormat.setLenient(false);
        
    	    try {
          //Parsing del parametro inDate
    	      dateFormat.parse(inDate.trim());
    	    }
    	    catch (ParseException pe) {
    	      testoOutput.setText("Data errata");
    	    }
    
    	      testoOutput.setText(inDate);
    
    		}
    	}
    Qualcuno saprebbe spiegarmi perchè il compilatore mi da l'errore:
    codice:
    myCalendar6.java:176: cannot find symbol
    symbol  : method setText(java.lang.String)
    location: class java.lang.String
    	inDate.setText(anno + "/" + mese + "/" + giorno);
    	      ^
    1 error
    ???
    Gato

  2. #2
    oh cacchio... scusate ri-posto l'errore:

    myCalendar6.java: 176: cannot find symbol
    symbol : method setText(java.lang.String)
    location: class java.lang.String
    inDate.setText(anno + "/" + mese + "/" + giorno);
    ^
    1 error
    Gato

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] problemi con setText()

    Originariamente inviato da fpertegato
    codice:
    	String inDate;
    
    	inDate.setText(anno + "/" + mese + "/" + giorno);
    Le stringhe sono oggetti "immutabili". Non esiste un metodo setText() né esiste un qualche altro metodo che modifica lo stato dell'oggetto String.

    Se volevi che a inDate fosse assegnato il reference alla nuova stringa composta, semplicemente:

    inDate = anno + "/" + mese + "/" + giorno;
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Ah, grazie! Altri appunti che scrivo ....
    Gato

  5. #5
    Se volevi che a inDate fosse assegnato il reference alla nuova stringa composta, semplicemente: inDate = anno + "/" + mese + "/" + giorno;
    Comunque allora non posso neanche prima definirla e poi assegnarle il valore giusto?
    quindi questo codice sarebbe sbagliato

    codice:
    String inDate;
    inDate = anno + "/" + mese + "/" + giorno;
    e al suo posto dovrei scrivere: :master:

    codice:
    String inDate = anno + "/" + mese + "/" + giorno;
    ho capito giusto? :master:
    Gato

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da fpertegato
    Comunque allora non posso neanche prima definirla e poi assegnarle il valore giusto?
    quindi questo codice sarebbe sbagliato

    codice:
    String inDate;
    inDate = anno + "/" + mese + "/" + giorno;
    e al suo posto dovrei scrivere: :master:

    codice:
    String inDate = anno + "/" + mese + "/" + giorno;
    ho capito giusto? :master:
    No!

    Un oggetto String è immutabile!

    Se fai
    codice:
    String str;
    str = "stringa di prova";
    oppure

    codice:
    String stringa = "stringa di prova";
    Non hai creato un oggetto String, stai usando un riferimento, quindi tramite una successiva assegnazione quella variabile avrà un valore diverso.

    Ma se tu fai
    codice:
    String stringa = new String("Stringa di prova");
    e provi a modificarla, otterrai un errore.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fpertegato
    codice:
    String inDate;
    inDate = anno + "/" + mese + "/" + giorno;
    
    - - - - - - -
    
    String inDate = anno + "/" + mese + "/" + giorno;
    Sono entrambe corrette e alla fin fine fanno la stessa identica cosa. Cambia solo il fatto che nel primo caso non è subito inizializzata ma viene assegnato qualcosa appena dopo, purché, essendo una variabile "locale", sia fatto prima di essere usata (referenziata in qualche istruzione/espressione).

    Le variabili locali non hanno un "default" (a differenza di campi di istanza o di classe). Quindi ad esempio fare:

    codice:
    String nome;
    System.out.println(nome);
    nome = "Andrea";
    Questo sì, è proprio un errore. Viene usata in una istruzione/espressione prima di essere inizializzata.


    Originariamente inviato da Patrick Jane
    codice:
    String stringa = new String("Stringa di prova");
    e provi a modificarla, otterrai un errore.
    No. Se la variabile non è "final" nessuno può impedire di assegnare "qualcos'altro" (un altro reference ad altra stringa) alla variabile (finché la variabile è "in scope", chiaramente).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da andbin
    No. Se la variabile non è "final" nessuno può impedire di assegnare "qualcos'altro" (un altro reference ad altra stringa) alla variabile (finché la variabile è "in scope", chiaramente).
    Ma non posso modificare il contenuto di quella stringa no? Devo crearne un altra con le modifiche..

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Patrick Jane
    Ma non posso modificare il contenuto di quella stringa no? Devo crearne un altra con le modifiche..
    Sì ma non c'è alcun "errore" che ti può essere segnalato! A meno che ti inventi metodi di String che chiaramente non esistono o sbagli sintassi in generale in questo o altri punti.

    La questione è semplice: una stringa è un oggetto immutabile. Il suo "stato" non può cambiare (una volta che l'oggetto String è stato istanziato).
    A patto che una variabile String non sia marcata final puoi (ri)assegnare a tale variabile quante stringhe vuoi ... ma questo non vuol dire che hai modificato la stringa. Solo che hai un nuovo reference "in mano" piuttosto di un altro. Tutto qua.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    In conclusione: una stringa, se è dichiarata FINAL o come OGGETTO è IMMUTABILE, altrimenti (o else, che dir si voglia) è da trattare come qualsiasi altro tipo di variabile. Tutto corretto, ho capito giusto?
    Gato

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.