PDA

View Full Version : [Java] Esercizio Telefonino


Alhazred
22-02-2004, 16:59
Sto usando un libro univesitario per imparare java, ci sono degli esercizi, ma non sono risolti. Come risolvereste questo?

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.

anx721
22-02-2004, 17:47
Un modo di risolvere l'esercizio è creare una classe Message che ingloba sia il codice che il testo esteso:



class Message{

private String code;
private String mex;

public Message(String code, String mex){
this.code= code;
this.mex = mex;
}

public string getCode(){
return code;
}

public string getMex(){
return mex;
}
}


Quindi la classe MessagesText che memorizza le coppie (codice, testo) attraverso ogetti della classe Message e inserisce gli oggetti Message costruiti in un Vector:



class MessagesText{

private Vector messages;

public MessagesText(){
messages = new Vector();
}


public addMessage(String code, String mex){
messages.add(new Message(code, mex));
}

....

....
}



Poi ti implementi il metodo per ottenere il codice di un messaggio: dato il messaggio m, ti scorri il vettore messages e per ogni oggetto in tale vettore verifichi se quel Message ha il campo mex uguale a m; se è cosi restituisci il suo codice. Analogamente per il metodo che restituisce il messaggio a partire dal codice.

Ciao.

Alhazred
23-02-2004, 09:02
Chiedo scusa, colpa mia che non l'ho spiegato prima.
Questo esercizio è proposto sul libro quando ancora non sono stati spiegati i vettori e non sono ancora state spiegate le istruzioni condizionali.

cn73
23-02-2004, 09:17
Forse perchè le dava per scontate... :rolleyes:

Come si fa a parlare di classi, oggetti, metodi senza conoscere i vettori e le if???

monkey72
23-02-2004, 09:20
l'esercizio chiede solo di definire una classe con quei metodi, non basta il primo frammento di codice suggerito da anx721?

Alhazred
23-02-2004, 11:00
Originariamente inviato da cn73
Forse perchè le dava per scontate... :rolleyes:
...
No, perché vettori e if vengono spiegati in seguito.

anx721
23-02-2004, 11:01
Originariamente inviato da Alhazred
Chiedo scusa, colpa mia che non l'ho spiegato prima.
Questo esercizio è proposto sul libro quando ancora non sono stati spiegati i vettori e non sono ancora state spiegate le istruzioni condizionali.


Bhè, in effetti è impossibile fare questo esercizio senza le istruzioni condizionali, a meno di non usare una Hashtable, ma dubito che volesse questo il libro...

La sola classe Massage non basta, perchè il libro chiede una classe che mantenga una serie di corrispondenze (codice-messaggio): la classe Message serve a rappresentare una singola coppia, mentre MessagesText serve a contenere l'insieme di tutte le coppie,

ciao.

Alhazred
23-02-2004, 15:48
Secondo me, essendo solo a titolo didattico, vuole che si prevedano 2 o 3 messaggi solo per vedere se si è capito come creare nuovi oggetti.
Io avrei pensato a un paio di messaggi chiamati m1 e m2 creandoli con una cosa del tipo:
testoMessaggio m1 = new testoMessaggio(cod,text);
testoMessaggio m2 = new testoMessaggio(cod,text);

dove cod e text vengono assegnati a delle variabili digitandoli in una finestra di dialogo.

anx721
23-02-2004, 16:10
Se è cosi allora ti basta la sola classe Message che avevo definito sopra.

monkey72
24-02-2004, 09:11
Originariamente inviato da anx721
Se è cosi allora ti basta la sola classe Message che avevo definito sopra.
:Prrr: ;)

Alhazred
05-03-2004, 09:41
Andando avanti vengono richieste altre funzioni per il programma.

la classe TestoMessaggio è quella proposta all'inizio del thread, vi ricordo che non si possono usare vettori, istruzioni condizionali o cicli, basta creare un numero di oggetti sufficiente a testare il programma.

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

Scrivere un programma di esempio, che usa le due classi TestoMessaggio e Messaggio. Il programma deve:

1) contenere un metodo statico per la lettura di un numero telefonico da input

2) inizializzare una variabile di classe String, che corrisponde al numero di telefono del mittente

3) leggere il testo di un messaggio ed il codice, e memorizzarli in un oggetto di classe TestoMessaggio

4) leggere il numero di telefono del destinatario

5) creare un oggetto di classe Messaggio

6) visualizzare l'oggetto di classe Messaggio

anx721
05-03-2004, 12:57
Posta una domanda precisa su cio che non ti e chiaro, se ti diamo la risposta completa noi non capisco cosa ne ricavi a fare questi esercizi.

Alhazred
05-03-2004, 14:41
Originariamente inviato da anx721
Posta una domanda precisa su cio che non ti e chiaro, se ti diamo la risposta completa noi non capisco cosa ne ricavi a fare questi esercizi.
Hai ragione.
Come risolvo il punto 4) della prima parte?
Ecco la classe Messaggio come l'ho pensata io:

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());
}
}

Dove ci sono gli asterischi ci andrebbe il metodo che cambia il numero del destinatario, ma come lo faccio? Devo prima scrivere un metodo che mi ritorni il numero? Oppure c'è modo di farlo direttamente?

anx721
05-03-2004, 20:50
Per fare in modo che la classe estesa Messaggio contenga il numero del destinatario e il numero del mittente devi dichiarare due campi di tipo stringa che conterranno queste informazioni. Quello che tu hai fatto non è corretto in quanto non hai definito due campi, ma delle variabili locali all'interno dei costruttori, che vengono distrutte appena il costruttore termina.

Quindi

String numMitt;
String numDest;

vanno posti al di fuori del costruttore; all'interno del costruttore poi fai l'assegnamento:

numMitt = mitt;
numDest = dest;

Per aggiornare il destinatario è sufficiente dichiarare un metodo che prende una stringa numDest e la assegna al campo numDest. Bada che se l'argomento del metodo ha lo stesso nome del campo numDest, all'interno del metodo per far riferimento al campo numDest della classe devi usare la forma: this.numDest, mentre usando solo numDest fai riferimento all'argomento.

Alhazred
06-03-2004, 11:17
Ho apportato la modifica alla classe estesa Messaggio, quella di mettere String numMitt e String numDest fuori dal costruttore.

Credo di aver risolto in questo modo:


public void modificaDest(String nuovoDest) {
this.numDest = nuovoDest;


Non ho potuto verificare perché non riesco a scrivere una riga che mi scriva il numero del destinatario
Ho provato con una cosa di questo tipo:


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


Ottengo un errore nella chiamata a modificaDest:
" 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"

anx721
06-03-2004, 11:47
Il motivo per cui non trova il main è che non lo hai dichiarato static:

public void main (String[] args)

invece deve essere

public static void main (String[] args)


Il motivo per cui non trova il metodo modificaDest è perche questo è un metodo della classe Messaggio, non della classe Cliente, quindi lo devi invocare su un oggetto della classe Messaggio, ovvero sull'oggetto m1 che rappresenta il tuo Messaggio:

m1.modificaDest(nuovoDest);

Alhazred
06-03-2004, 16:23
Grazie, ho risolto, adesso funziona tutto :)