Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225

    [JAVA] PROBLEMA CON ListNode

    Ciao!
    Ho una ListNode CLIENTI, nella quale posso aggiungere e rimuovere oggetti cliente!
    Il problema è questo: io inserisco nella lista un cliente con un certo codice ed un certo nome. E fin qui tutto ok. Se inserisco lo stesso codice e lo stesso nome del cliento e dico alla lista di rimuovere questo cliente, lei mi dice che non c'è nessun cliente con quel codice e quel nome!!!
    Com'è possibile????
    Tra l'altro, come potete vedere nel codice sotto, gli faccio fare una stampa degli elementi che sono nella lista dopo aver rimosso il cliente, e nella stampa mi compare il nome del cliente che dovevo rimuovere!! Perciò nella lista c'è....e perchè non lo trova allora?
    GRAZIE!

    codice:
    public class PanSocieta extends JPanel implements ActionListener {
        
        protected JTextField t1, t2, t3, t4, t5;
        protected JLabel j1, j2, j3, j4, j5;
        protected JButton b1, b2;
        protected ListNode CLIENTI;
        protected ClienteSocieta c;
        protected FinestraLista fl;
    
        public PanSocieta(ListNode CLIENTI) {
            super();
            
            this.CLIENTI = CLIENTI;
            
            setBackground(new Color(65,208,223));
            
            j1 = new JLabel("Codice cliente:");
            j2 = new JLabel("Nome ditta:");
            j3 = new JLabel("Indirizzo sede:");
            j4 = new JLabel("Partita IVA:");
            j5 = new JLabel("Telefono:");
            
            t1 = new JTextField(20);
            t2 = new JTextField(20);
            t3 = new JTextField(20);
            t4 = new JTextField(20);
            t5 = new JTextField(20);
            t1.setEditable(true);
            t2.setEditable(true);
            t3.setEditable(true);
            t4.setEditable(true);
            t5.setEditable(true);
            
            b1 = new JButton("INSERISCI");
            b2 = new JButton("RIMUOVI");
            b1.addActionListener(this);
            b2.addActionListener(this);
            
            
                    
            add(j1);
            add(t1);
            add(j2);
            add(t2);
            add(j3);
            add(t3);
            add(j4);
            add(t4);
            add(j5);
            add(t5);
            add(b1);
            add(b2);
        }
        
        public void actionPerformed(ActionEvent e) {
            
            if (e.getSource()==b1) {
                c = new ClienteDittaIndividuale(t1.getText(), t2.getText());
                CLIENTI.insert(c);
                CLIENTI = c.ordinaLista(CLIENTI); 
                c.salvaListaClienti(CLIENTI); 
                String[] NOMI = c.getNomiClienti(CLIENTI);
                System.out.println("Clienti presenti nella ListNode: "); 
                int l = CLIENTI.length();
                for(int i=0; i<l; i++) System.out.println(NOMI[i]);
                System.out.println("Clienti presenti nel file: ");    
                c.leggiCliente(l);
                
                FinestraLista fl = new FinestraLista("Lista clienti"); 
                Container cont = fl.getContentPane();
                PannelloLista pl = new PannelloLista(this.fl, this);
                cont.add(pl);
                fl.setVisible(true);
                
                FinestraDomanda fd = new FinestraDomanda();
                Container c = fd.getContentPane();
                PannelloDomanda pd = new PannelloDomanda();
                c.add(pd);
                fd.setVisible(true);
            }
            
            else {
                c = new ClienteDittaIndividuale(t1.getText(), t2.getText());
                boolean a = CLIENTI.contains(c);      //METODO CHE MI DICE SE C'E' ELEMENTO CERCATO
                System.out.println(a);
                CLIENTI.remove(c);      //METODO CHE RIMUOVE ELEMENTO 
                CLIENTI = c.ordinaLista(CLIENTI);
                String[] NOMI = c.getNomiClienti(CLIENTI);
                System.out.println("Clienti presenti nella ListNode: "); 
                int l = CLIENTI.length();
                for(int i=0; i<l; i++) System.out.println(NOMI[i]);
                c.salvaListaClienti(CLIENTI); 
                System.out.println("Clienti presenti nel file: ");    
                c.leggiCliente(CLIENTI.length());
                
                FinestraLista fl = new FinestraLista("Lista clienti"); 
                Container cont = fl.getContentPane();
                PannelloLista pl = new PannelloLista(this.fl, this);
                cont.add(pl);
                fl.setVisible(true);
               }
                
        }
        
    }
    ListNode = lista implementata a riferimenti

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] PROBLEMA CON ListNode

    Originariamente inviato da ELY85
    Ho una ListNode CLIENTI, nella quale posso aggiungere e rimuovere oggetti cliente!
    Il problema è questo: io inserisco nella lista un cliente con un certo codice ed un certo nome. E fin qui tutto ok. Se inserisco lo stesso codice e lo stesso nome del cliento e dico alla lista di rimuovere questo cliente, lei mi dice che non c'è nessun cliente con quel codice e quel nome!!!
    Com'è possibile????
    A) ListNode che cosa è??? Immagino che sia una classe fatta da te (non è certamente standard). In tal caso ci sono due possibilità: o spieghi e mostri esattamente cosa fa oppure utilizzi (e sarebbe meglio) una delle classi standard del "collections framework" che implementa una lista linkata (che è sicuramente migliore della tua).

    B) Dovresti descrivere e mostrare come è fatta la classe ClienteDittaIndividuale i cui oggetti vengono inseriti nella lista. Domanda: hai implementato equals()?? E la "tua" lista come fa la ricerca per vedere se un elemento esiste già?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Devo utilizzare per forza questa lista fatta dal mio prof.!
    Ecco il codice:

    NODE:
    codice:
    class Node {
        Object info;
        Node next;   /** Struttura ricorsiva; next è un riferimento ad un oggetto della classe stessa. */
    
        public Node(Object o) {
            this(o, null);
        }
        
        public Node(Object o, Node n) {
            info = o;
            next = n;
        }
    }
    LISTNODE:
    codice:
    public class ListNode implements List {
         
         private Node node;  /** Riferimento ad un oggetto di classe Node;
                               * è il primo nodo della lista.
                               */
                               
        /** Costruttore della lista vuota */
        public ListNode() {
            node = null;
        }
        
        /** Costruttore che inizializza il primo elemento della lista con l'oggetto
         *  passato come parametro. Viene istanziato un oggetto di classe Node, 
         *  contenente l'oggetto o.
         */
        public ListNode(Object o) {
            node = new Node(o);
        }
        
        /** Costruttore che inserisce tutti gli elementi della lista l mantenendo
         *  l'ordine, poi inserisce l'elemento o.
         */
        public ListNode(Object o, List l) {
            if(l != null) revInsert(l);
            insert(o);
        }
        
        /** Metodo privato che viene invocato da altri metodi. Legge gli elementi della
         *  lista l e li inserisce in modo da mantenere l'ordine.
         */
        private void revInsert(List l) {
            if (!l.isEmpty()) {
                revInsert(l.tail());
                insert(l.head());
            }
        }
        
        /** Metodo che mi dice se la lista è vuota. */
        public boolean isEmpty() {
            return (node == null);
        }
        
        /** Metodo che restituisce il primo elemento della lista. */
        public Object head() {
            if (isEmpty()) return null;
            else return node.info;
        }
        
        /** Metodo che restituisce l'ultimo elemento della lista. */
        public Object last() {
            if (isEmpty()) return null;
            Node tmp = node;
            // Scorre tutti gli elementi della lista.
            while (tmp.next != null) tmp = tmp.next;
            return tmp.info;
        }
        
        /** Metodo che restituisce la lista senza il primo elemento (coda). */
        public List tail() {
            if (isEmpty()) return null;
            else {
                // Costruisce una lista nuova.
                ListNode tmp = new ListNode();
                // Impone che il primo nodo sia il vecchio secondo nodo.
                tmp.node = node.next;
                return tmp;
            }
        }
        
        /** Metodo che inserisce un elemento in testa alla lista. */
        public void insert(Object o) {
            // Costruisce un nuovo nodo con o all'inizio e il vecchio nodo come successivo.
            node = new Node(o, node);
        }
        
        /** Metodo che cancella un elemento dalla lista: ricerca l'elemento richiesto;
         *  se viene trovato, i riferimenti vengono cambiati in modo da escludere 
         *  l'elemento da cancellare. Se l'elemento non viene trovato, la lista non cambia.
         *  In ogni caso il chiamante non viene notificato.
         */
        public void remove(Object o) {
            if (!isEmpty()) {
                Node pred = node;
                Node tmp = node.next;
                
                if (node.info.equals(o)) node = node.next;
                else
                    while(tmp != null)
                        if (tmp.info.equals(o)) {
                            pred.next = tmp.next;
                            return;
                        }
                        else {
                            pred = pred.next;
                            tmp = tmp.next;
                        }
            }
        }
        
        /** Metodo che calcola la lunghezza della lista scorrendo tutti gli elementi
         *  della lista e incrementando di volta in volta un contatore. Versione
         *  dipendente dall'implementazione.
         */
        public int lengthD() {
            Node tmp = node;
            int cont = 0;
            while(tmp != null) {
                tmp = tmp.next;
                cont++;
            }
            return cont;
        }
        
        /** Metodo che calcola la lunghezza della lista. Versione indipendente dalla
         * implementazione.
         */
        public int length() {
            if (isEmpty()) return 0;
            else return (tail().length()+1);
        }
        
        /** Metodo che dice se un elemento è nella lista. */
        public boolean contains(Object o) {
            Node tmp = node;
            while (tmp != null) {
                if (tmp.info.equals(o)) return true;
                tmp = tmp.next;
            }
            return false;
        }
        
        /** Metodo che permette di ottenere una stringa corrispondente alla lista. */
        public String toString() {
            String tmp = "";
            for(Node i=node; i!=null; i=i.next) tmp = tmp + " " + i.info.toString();
            return tmp;
        }
        
    }
    CLIENTEDITTAINDIVIDUALE:
    codice:
    public class ClienteDittaIndividuale extends ClienteSocieta /*implements Serializable*/ {
        private String codFiscale;
    
        public ClienteDittaIndividuale(String c, String n) {
            super(c, n);
        }
        
        /** Metodo per inserire il codice fiscale. */
        public void insCodFiscale(String codice) {
            codFiscale = codice;
        }
        
        /** Metodo che restituisce il codice fiscale del cliente. */
        public String getCodFiscale() {
            return codFiscale;
        }
        
        /** Ridefinizione del metodo salvaCliente. */
        public void salvaCliente(ClienteDittaIndividuale c) {
            FileOutputStream f = null;
            try {
                f = new FileOutputStream("Clienti.dat", true);
            }
            catch (IOException e) {
                System.out.println("Errore 1");
                System.exit(1);
            }
            
            ObjectOutputStream os = null;
            try {
                os = new ObjectOutputStream(f);
                os.writeObject(c);
                os.flush();
                os.close();
            }
            catch (IOException e) {
                System.out.println("Errore 2");
                System.exit(2);
            }
        }
        
        /** Ridefinizione di salvaListaClienti */
        public void salvaListaClienti(ListNode l) {
            ClienteDittaIndividuale primo, ultimo;
            primo = (ClienteDittaIndividuale)l.head();
            ultimo = (ClienteDittaIndividuale)l.last();
            if (l.isEmpty()) return;
            if (primo.equals(ultimo)) {
                salvaCliente(primo);
                return;
            }
            else {
                salvaCliente(primo);
                salvaListaClienti((ListNode)l.tail());
            }
        }
        
        /** Ridefinizione del metodo leggiCliente. */
        public void leggiCliente(int lunghezza) {
            FileInputStream fis = null;
            ObjectInputStream is = null;
            try {
                fis = new FileInputStream("Clienti.dat");
                is = new ObjectInputStream(fis);
            }
            catch (IOException e) {
                System.out.println("Errore 3");
                e.printStackTrace(); 
                System.exit(3);
            }
            
            ClienteDittaIndividuale c2 = null;
            try {
                int i=0;
                while (i<lunghezza) {
                    c2 = (ClienteDittaIndividuale)(is.readObject()); 
                    System.out.println(c2.getNome());
                    i++;
                }
                is.close();
            }
            catch (IOException e) {
                System.out.println("Errore 4");
                e.printStackTrace(); 
                System.exit(4);
            }
            catch (ClassNotFoundException e) {
                System.out.println("Errore 5");
                e.printStackTrace(); 
                System.exit(5);
            }
        }
        
        /** Ridefinizione del metodo getNomiClienti(). */
        public String[] getNomiClienti(ListNode l) {
            int lunghezza = l.length();
            String[] nomi = new String[lunghezza];
            for(int i=0; i<lunghezza; i++) {
                ClienteDittaIndividuale c = (ClienteDittaIndividuale)l.head();
                String n = c.getNome();
                nomi[i] = n;
                l = (ListNode)l.tail();
            }
            return nomi;
        }
        
        
    }
    GRAZIE MILLE!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ELY85
    Devo utilizzare per forza questa lista fatta dal mio prof.!
    Vabbé....

    Allora nella tua classe ClienteDittaIndividuale implementa semplicemente equals(), altrimenti l'equals ereditato da Object si basa solamente sul confronto dei reference e non (come sarebbe più logico) sul contenuto degli oggetti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Al metodo equals() faccio confrontare per esempio i nomi dei clienti, giusto?
    GRAZIE MILLE

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ELY85
    Al metodo equals() faccio confrontare per esempio i nomi dei clienti, giusto?
    Devi stabilire se due oggetti ClienteDittaIndividuale sono uguali o no in base al loro contenuto. Quindi devi prendere in considerazione tutti i campi che per te (secondo il tuo design) danno l'identità di un cliente.

    E comunque nella tua classe ClienteDittaIndividuale la "coesione" è molto bassa. Una classe dovrebbe essere focalizzata su una e una cosa soltanto (alta coesione). La tua classe invece fa di tutto, compreso salvare/leggere da file o ottenere i nomi dei clienti da una intera lista.

    Non vedo alcun motivo per cui nella tua classe ClienteDittaIndividuale ci debba essere un metodo getNomiClienti che non ha nulla a che vedere con la nozione dell'oggetto "un cliente".
    Insomma il design VVoVe:
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ok, GRAZIE MILLE!

    P.S. Se puoi, potresti darmi un'occhiata alle discussioni "BLOCCO DEL PROGRAMMA" e "CHIARIMENTO SU RIFERIMENTI", che non sono ancora riuscita a risolvere quei problemi?
    GRAZIE MILLE!


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 © 2026 vBulletin Solutions, Inc. All rights reserved.