Oppure

Loading
04/07/12 11:20
enrico_84
Vi posto il codice della classe principale:
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:

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!
aaa
08/07/12 17:51
corin7
Ciao, cerco di darti una mano.
Per prima cosa ho rilevato un incongruenza tra l'uso dei metodi sulle superclassi, nel dettaglio nella classe UsaSms:

-vengono richiamati alla linea 15 - 26 - 37 - 40 i metodi aggiungi(char c) e spezza(). Però, anche se effettivamente l'oggetto mess e di tipo Sms e l'oggetto mess1 è di tipo SmsLungo, hai limitato la visibilità alla superclasse Messaggio, la quale non dichiara i metodi aggiungi e spezza, e quindi presenta un errore di sintassi.

-Alla linea 37, inoltre, hai richiamato il metodo spezza() su un oggetto di Sms che non prevede il metodo.

Speso di esserti stato di aiuto ;)

Ultima modifica effettuata da corin7 08/07/12 17:54
aaa