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

    Classi e sottoclassi

    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!

  2. #2
    che errore?

  3. #3
    esatto!! che errore ti viene segnalato??

    senza è difficile darti una mano.
    Ho provato a copiare il tuo codice, e mi vengono fuori parecchi errori di compilazione! prova a risolvere quelli, magari si risolve tutto così.

  4. #4
    Errori che mi escono:

    Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    The method aggiungi(char) is undefined for the type Messaggio
    The method aggiungi(char) is undefined for the type Messaggio
    The method spezza() is undefined for the type Messaggio
    The method spezza() is undefined for the type Messaggio

    at cap4.UsaSms.main(UsaSms.java:20)

  5. #5
    Originariamente inviato da enrico_84
    Errori che mi escono:

    Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    The method aggiungi(char) is undefined for the type Messaggio
    The method aggiungi(char) is undefined for the type Messaggio
    The method spezza() is undefined for the type Messaggio
    The method spezza() is undefined for the type Messaggio

    at cap4.UsaSms.main(UsaSms.java:20)
    Bhe mi sembra abbastanza chiaro quale sia il problema!! come ti dicevo prima ci sono errori in compilazione!! E il compilatore ti sta segnalando che il metodo aggiungi della classe Messaggio non è definito!

    Un consiglio: per programmare usa un ide tipo eclipse, che ti segnala errori di compilazione come questo.

    In linea di massima, prima di realizzare una classe main definisci quali sono i metodi e le funzionalità che le tue classi devono avere, poi dopo potrai implementare il main per richiamare le tue funzioni.

  6. #6
    gli errori che ho trovato sono:
    -Leggi.unoString(); e Leggi.unoChar(); non li ho mai visti per prendere una stringa in ingresso.
    -System.out.print(mess.spezza()); mess siccome è di tipo sms non ha il metodo spezza()
    -System.out.print(mess1.spezza()); questa non da errore ma non ho idea di cosa prenterà a video siccome il metodo SmsLungo.spezza ritorna un'array di Sms

  7. #7
    Il metodo Leggi.unoString() è un metodo da me creato e funzionante che mi fa scrivere una stringa e la stampa.
    Uso eclipse come IDE per compilare, infatti ho capito quali sono gli errori solo il mio problema è scrivere il codice correttamente.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da enrico_84
    Il metodo Leggi.unoString() è un metodo da me creato e funzionante che mi fa scrivere una stringa e la stampa.
    Uso eclipse come IDE per compilare, infatti ho capito quali sono gli errori solo il mio problema è scrivere il codice correttamente.
    Se non compila, posta gli errori di compilazione e le righe che li generano.

  9. #9
    Questi sono gli errori che mi dà:

    The method aggiungi(char) is undefined for the type Messaggio line 20
    The method aggiungi(char) is undefined for the type Messaggio line 31
    The method spezza() is undefined for the type Messaggio line 42
    The method spezza() is undefined for the type Messaggio line 45

  10. #10
    Secondo me ci sono degli errori di base!

    Tu stai usando un oggetto Messaggio, in modo non proprio, immagino (se ho capito bene quello che vorresti fare) che ti serva un'interfaccia! Dichiara un'interfaccia che esponga tutti i metodi della classe che ti serve per esempio Sms.

    quindi scriverai:
    interfaccia ISms
    con tutti i metodi impostaMittente, impostaDestinatario ecc ecc e anche e soprattutto il metodo aggiungi.

    Dopo di che creerai se ti serve una classe astratta che racchiuda tutte le funzionalità di base della tua interfaccia, e poi creerai una classe che estenda la classe astratta.

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.