|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
![]() |
#1 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
[Java] Esercizio Telefonino
Si vuole realizzare un sistema per la composizione dei messaggi da inviare tramite telefonino. Ad ogni messaggio corrisponde un codice. Ad esempio al codice "ta" corrisponde il messaggio completo "ti amo, amore.". Definire la classe TestoMessaggio per la gestione dei messaggi. La classe deve avere un metodo per creare oggetti TestoMessaggio leggendo il codice e il messaggio completo da tastiera, un metodo per restituire il codice ed un metodo per restituire il testo del messaggio. Per questa prima parte di classe va bene questa. [PHP] class TestoMessaggio{ private String code; private String mex; public TestoMessaggio(String code, String mex){ this.code= code; this.mex = mex; } public string getCode(){ return code; } public string getMex(){ return mex; } } [/PHP] Prosegue così: Un messaggio deve contenere il numero da chiamare, il mittente ed il testo del messaggio. Definire una classe Messaggio, con: 1) un metodo che crea un'istanza a partire da un oggetto di classe TestoMessaggio e 2 stringhe che rappresentano il numero di tel. del mittente e destinatario 2) un metodo che crea un'istanza a partire da un oggetto di classe TestoMessaggio ed una stringa che rappresenta il numero di telefono del mittente 3) un metodo che crea un'istanza a partire da un oggetto di classe TestoMessaggio 4) un metodo che riceve come parametro il numero di telefono del destinatario ed aggiorna il destinatario del messaggio 5) un metodo per la stampa del messaggio Ho pensato a questa classe: [PHP] public class Messaggio extends TestoMessaggio { public Messaggio(String code, String mex, String mitt, String dest) { super(code, mex); String numMitt = mitt; String numDest = dest; } public Messaggio(String code, String mex, String mitt) { super(code, mex); String numMitt = mitt; } public Messaggio(String code, String mex) { super(code, mex); } public void modificaDest(String numDest) { *********************************** } public void stampaMessaggio(Messaggio m) { System.out.println(m.getMex()); } } [/PHP] Dove ci sono gli asterischi ci andrebbe il metodo che cambia il numero del destinatario, ma come lo faccio? Devo scrivere anche un metodo che restituisca il numero oppure c'è un altro modo per sostituirlo? |
![]() |
![]() |
![]() |
#2 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
![]() |
Prima osservazione:
nel primo dei costruttori che hai messo, dopo la chiamata a super() che è corretta, fai due assegnamenti: a cosa? ![]() numMitt e numDest dovranno essere delle variabili della classe Messaggio ![]() E questa è anche la risposta al tuo dubbio... Codice:
public void modificaDest(String numDest) { *********************************** } ![]() Un altro appunto: in stampaMessaggio tu passi il messaggio stesso... non ha senso. Tu chiami quel metodo su un certo oggetto messaggio, a cui hai appunto il riferimento, che ti restituisce il testo del messaggio stesso. E nel corpo del metodo, non devi usare un metodo della classe Messaggio stessa, ricorda sempre "this" (certo, puoi benissimo usarlo, nessuno lo vieta ma... non è propriamente la cosa migliore da fare ![]() Buon lavoro! ![]() *** EDIT: ecco, ho ricordato, si chiamano "Observer", perchè appunto osservano qualche cosa della classe: il getMex, per esempio, è observer perchè restituisce un qualche cosa della classe, cioè il messaggio. Ultima modifica di Dav82 : 06-03-2004 alle ore 00.28.56 |
![]() |
![]() |
![]() |
#3 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
Codice:
public void modificaDest(String numDest) { String nuovoDest = JOptionPane.showInputDialog("Inserisci il nuovo destinatario"); this.numDest = nuovoDest; ![]() Ho provato con una cosa di questo tipo: Codice:
import javax.swing.JOptionPane; public class Cliente { String numero; public static String leggiNumero() { String numero = JOptionPane.showInputDialog("Inserisci il numero del destinatario"); return numero; } public void main (String[] args) { String numMitt = "3973186876"; String numero = leggiNumero(); Messaggio m1 = new Messaggio("cs","Come stai?",numMitt,numero); System.out.println(this.numero); String nuovoDest = JOptionPane.showInputDialog("Inserisci il nuovo destinatario"); modificaDest(nuovoDest); System.out.println(this.numero); } } " cannot resolve symbol symbol : method modificaDest (java.lang.String)" Togliendo la chiamata e ricompilando va tutto bene, però in esecuzione mi si presenta un altro errore: "Exception in thread "main": Java.lang.NoSuchMethodError: main" |
|
![]() |
![]() |
![]() |
#4 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
![]() |
Ovviamente ti dice che non trova nessun metodo modificaDest(): infatti lui lo cerca nella classe Cliente, è come se prima di modificaDest(nuovoDest) ci fosse un this, in pratica tu chiami this.modificaDest(nuovoDest) che non esiste. Tu dovresti chiamare m1.modificaDest(nuovoDest), perchè è il Messaggio che ha quel metodo, non il Cliente.
La seconda println di numero è uguale alla prima, perchè tu non modifichi la variabile numero nella classe Cliente fra una println e l'altra. Non capisco invece l'eccezione nel thread main, tu il main ce l'hai... boh! Un appunto sulla costruzione delle classi: in Cliente tu fai in modo di salvare in un attributo della classe il numero del destinatario, ma questo numero è proprio del messaggio, non del Cliente. Dovresti invece tenere come attributo della classe Cliente il numero del mittente, questo sì: lo fai in parte, scrivendo nel main String numMitt = "3973186876": così facendo però l'informazione non è persistente, in sostanza numMitt è una variabile allocata nel main, non è una vera e propria variabile della classe. Ti faccio un esempio. Se tu dal main chiamassi un metodo che serve al Cliente per impostare il proprio numero, una cosa così insomma: Codice:
public static void main (String[] args){ // tutto il resto... impostaNumMitt(); // tutto il resto... private void impostaNumMitt(){ String buffer = JOptionPane.showInputDialog("Imposta num:"); numMitt = buffer; } } ![]() |
![]() |
![]() |
![]() |
#5 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
A forza di tentativi ci sono quasi, la classe Cliente l'ho fatta diventare così: Codice:
import javax.swing.JOptionPane; public class Cliente { String numero; public static String leggiNumero() { String numero = JOptionPane.showInputDialog("Inserisci il numero del destinatario"); return numero; } public static void main (String[] args) { String numMitt = "3973186876"; String numero = leggiNumero(); Messaggio m1 = new Messaggio("cs","Come stai?",numMitt,numero); System.out.println(m1.numDest); String nuovoDest = JOptionPane.showInputDialog("Inserisci il nuovo destinatario"); m1.modificaDest(nuovoDest); System.out.println(m1.numDest); } } |
|
![]() |
![]() |
![]() |
#6 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Ho risolto, stavolta il problema era nella classe Messaggio, iniziava così:
Codice:
public class Messaggio extends TestoMessaggio { String numMitt; String numDest; public Messaggio(String code, String mex, String mitt, String dest) { super(code, mex); String numMitt = mitt; String numDest = dest; } ..... Codice:
public class Messaggio extends TestoMessaggio { String numMitt; String numDest; public Messaggio(String code, String mex, String mitt, String dest) { super(code, mex); this.numMitt = mitt; this.numDest = dest; } ...... |
![]() |
![]() |
![]() |
#7 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Grazie dell'aiuto Dav
![]() tanto avrò ancora bisogno di fare altre domande, questo esercizio continua... ma non oggi, adesso basta ![]() |
![]() |
![]() |
![]() |
#8 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
![]() |
Urca urca, non avevo fatto caso ad una cosa!!!! E questa cosa sta più o meno alla base di tutta la programmazione ad oggetti.
Tu in cliente fai la print passando come parametro m1.numDest: così facendo accedi dalla classe Utente ad un attributo della classe Messaggio. In generale questo non è assolutamente consigliabile, perchè in questo modo potresti anche direttamente fare, sempre dalla classe Utente, m1.numDest = "quello che vuoi tu". In Messaggio gli attributi devono essere private, così possono essere toccati solo dall'interno della classe messaggio stessa ![]() Public e private funzionano per gli attributi come per i metodi. Ci sono poi anche altri tipi di visibilità oltre a public e private: sono "friendly", "protected" e "package" : non mi ricordo mai bene come sono, anzi due sono la stessa cosa... se vuoi guarda sul manuale ![]() Ciao ![]() |
![]() |
![]() |
![]() |
#9 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
![]() Grazie ancora. |
|
![]() |
![]() |
![]() |
#10 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
![]() |
Di niente, figurati
![]() |
![]() |
![]() |
![]() |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
![]() |
||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
PRESENTATO TELEFONINO PER CIECHI, LEGGE TESTI A UTENTE | giobar57 | Segnalazioni Web | 0 | 15-07-2008 19.50.52 |
Sicuramente OT! WinME e Telefonino NEC338 | Frengo | Software applicativo | 3 | 20-07-2005 19.23.40 |
No al caro-cellulare - sciopero del telefonino previsto per il 18/12 | Macao | Segnalazioni Web | 1 | 13-12-2004 10.22.50 |
Esercizio matematico... | handyman | Chiacchiere in libertà | 33 | 23-04-2004 22.20.48 |
Ke telefonino mi consigliate di comprare | Peppe D | Chiacchiere in libertà | 20 | 22-09-2003 00.55.54 |