Vi posto il codice della classe principale:
Codice sorgente
codice:
abstract class Messaggio {
protected String mittente;
protected String destinatario;
protected String data;
protected String ora;
//costruttori
public void impostaMittente(String mittente) {
this.mittente = mittente;
}
public void impostaDestinatario(String destinatario) {
this.destinatario = destinatario;
}
public void impostaData(String data) {
this.data = data;
}
public void impostaOra(String ora) {
this.ora = ora;
}
}
abstract class MessaggioDiTesto extends Messaggio {
protected char[] testo;
protected int numeroCaratteri = 0;
abstract boolean aggiungi(char c);
public String toString() {
String tmp = "Da: " +mittente+ "\n" +
"A: " +destinatario+ "\n" +
"Data: " +data+ " " +ora;
for(int i=0; i<numeroCaratteri; i++)
tmp += (i%25==0? "\n" : "") +testo[i];
return tmp;
}
}
class Sms extends MessaggioDiTesto {
public static final int MAX = 160;
//costruttore, lo costruisco come un array
public Sms() {
this.testo = new char[MAX];
}
public boolean aggiungi(char c) {
if(this.numeroCaratteri < MAX) {
this.testo[this.numeroCaratteri++] = c;
return true;
}
else
return false;
}
}
class SmsLungo extends MessaggioDiTesto {
private String testoLungo = "";
public boolean aggiungi(char c) {
this.testoLungo += c;
this.numeroCaratteri++;
this.testo = this.testoLungo.toCharArray();
return true;
}
//creo un array di Sms normali da un Sms lungo
public Sms[] spezza() {
int numeroMessaggi = this.numeroCaratteri/Sms.MAX+1;
Sms[] messaggi = new Sms[numeroMessaggi];
for(int i=0; i<numeroMessaggi; i++) {
messaggi[i] = new Sms();
messaggi[i].impostaMittente(this.mittente);
messaggi[i].impostaDestinatario(this.destinatario);
messaggi[i].impostaData(this.data);
messaggi[i].impostaOra(this.ora);
int j = i * Sms.MAX;
while(j<this.numeroCaratteri &&
messaggi[i].aggiungi(this.testo[j]))
j++;
}
return messaggi;
}
}
Ora vorrei creare nella classe main dei messaggi da visualizzare con il destinatario, data, ora e mittente:
Codice sorgente
codice:
public class UsaSms {
public static void main(String[] args) {
Messaggio mess = new Sms();
Messaggio mess1 = new SmsLungo();
System.out.print("Inserisci il tuo numero di telefono: ");
mess.impostaMittente(Leggi.unoString());
System.out.print("\nChe giorno è oggi? ");
mess.impostaData(Leggi.unoString());
System.out.println("Scrivi un messaggio breve (max 160 caratteri) ");
String x = Leggi.unoString();
//inserisco i caratteri della stringa in un array
char[] caratteri = x.toCharArray();
for(int i=0; i<caratteri.length; i++)
mess.aggiungi(caratteri[i]);
System.out.println();
System.out.print("Che ore sono? ");
mess.impostaOra(Leggi.unoString());
System.out.print("Inserisci il numero di telefono\n" +
" a cui inviare il messaggio: ");
mess.impostaDestinatario(Leggi.unoString());
System.out.println();
System.out.println("Ora scrivi un messaggio lungo ");
mess1.aggiungi(Leggi.unChar());
System.out.println();
System.out.print("Che ore sono? ");
mess.impostaOra(Leggi.unoString());
System.out.print("Inserisci il numero di telefono\n" +
" a cui inviare il messaggio: ");
mess.impostaDestinatario(Leggi.unoString());
System.out.println();
System.out.print("Il primo messaggio, quello breve, è il seguente: ");
System.out.print(mess.spezza());
System.out.print("Il secondo messaggio, quello lungo, è il seguente: ");
System.out.print(mess1.spezza());
System.exit(0);
}
}
Purtroppo mi da errore nella creazione degli oggetti, mi aiutate voi a farlo funzionare? Grazie mille!