Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225

    [Java] BLOCCO del PROGRAMMA

    Ciao!
    Quando eseguo queste istruzioni, cliccando sul bottone b1, il programma mi si blocca!

    codice:
    if (e.getSource()==b1) {
                c = new ClienteDittaIndividuale(t1.getText(), t2.getText());
                CLIENTI.insert(c);
                c.insCliente(t2.getText());
                c.salvaListaClienti(CLIENTI);
                c.leggiCliente();
                
                FinestraDomanda fd = new FinestraDomanda();
                Container cont = fd.getContentPane();
                PannelloDomanda pd = new PannelloDomanda();
                cont.add(pd);
                fd.setVisible(true);
            }
    Cosa potrebbe essere a causare il blocco?
    Non mi era mai successo!
    GRAZIE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Una qualsiasi delle seguenti istruzioni:
    codice:
    c = new ClienteDittaIndividuale(t1.getText(), t2.getText());
    CLIENTI.insert(c);
    c.insCliente(t2.getText());
    c.salvaListaClienti(CLIENTI);
    c.leggiCliente();
                
    FinestraDomanda fd = new FinestraDomanda();
    PannelloDomanda pd = new PannelloDomanda();
    Non avendo il codice di nessuna delle classi ClienteDittaIndividuale, CLIENTI (è una classe o un oggetto?), FinestraDomanda, PannelloDomanda è impossibile dire quale delle istruzioni provoca il blocco.

    Controlla una per una le classi e i metodi che richiami, controllando di non avere cicli che vanno in loop.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Il metodo che mi blocca il programma è questo:

    codice:
    public void salvaListaClienti(ListNode l) {
       while(l.length()!=1) {
                  salvaCliente((ClienteSocieta)l.head());
                  salvaListaClienti((ListNode)l.tail());
                  }
    }
    ListNode è una lista di clienti (implementata con riferimenti). Quello che vorrei fare è scorrere tutta la lista e salvare su file ogni oggetto Cliente man mano che li scorro!
    Qualcuno può aiutarmi a correggere il metodo?
    GRAZIE MILLE!


    Codice:
    codice:
    public class ListNode implements List {
         
         private Node node; 
                               
        /** Costruttore della lista vuota */
        public ListNode() {
            node = null;
        }
        
        /** Costruttore che inizializza il primo elemento della lista con l'oggetto
         *  passato come parametro. */
        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. */
        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. 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;
        }
        
    }
    Classe Node:
    codice:
    class Node {
    /** Classe accessoria non visibile all'esterno. */
      
        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;
        }
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ho provato a modificarlo in questo modo, ma continua a bloccarmi il programma!
    Questo metodo non dovrebbe contenere un ciclo infinito...!
    Perchè non funziona?

    codice:
    /** Metodo per salvare su file una lista di oggetti ClienteSocieta. */
        public void salvaListaClienti(ListNode l) {
            ClienteSocieta primo, ultimo;
            primo = (ClienteSocieta)l.head();
            ultimo = (ClienteSocieta)l.last();
            if (primo.equals(ultimo)) salvaCliente(primo);
            else {
                salvaCliente(primo);
                salvaListaClienti((ListNode)l.tail());
            }
        }
    GRAZIE

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    E cosa succede quando al metodo viene passata una lista vuota (e questo succede ad opera della ricorsione)?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ho provato a modificare il metodo in questo modo, ma il programma continua a bloccarsi!

    codice:
     public void salvaListaClienti(ListNode l) {
            ClienteSocieta primo, ultimo;
            primo = (ClienteSocieta)l.head();
            ultimo = (ClienteSocieta)l.last();
            if (l.isEmpty()) return;
            if (primo.equals(ultimo)) {
                salvaCliente(primo);
                return;
            }
            else {
                salvaCliente(primo);
                salvaListaClienti((ListNode)l.tail());
            }
        }
    isEmpty() mi dice se la lista è vuota o no!

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Prova ad inserire delle print per vedere il trace d'esecuzione, in modo da capire dove si ferma esattamente.
    Per facilitarti il lavoro, dovresti, ad ogni passaggio, farti stampare lo stato della lista e delle informazioni di controllo che ti facciano capire se in quel preciso momento, con quei valori, entra nel ramo then o else dell'istruzione if.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ho inserito queste print, ma il programma si blocca senza stamparmi niente!
    Quello che so è che arriva ad invocare il metodo salvaCliente (non so quale però!), perchè mi crea il file vuoto!

    codice:
     public void salvaListaClienti(ListNode l) {
            String elenco = l.toString();
            System.out.println(elenco);
            ClienteSocieta primo, ultimo;
            primo = (ClienteSocieta)l.head();
            System.out.println(primo);
            ultimo = (ClienteSocieta)l.last();
            System.out.println(ultimo);
            if (l.isEmpty()) return;
            if (primo.equals(ultimo)) {
                salvaCliente(primo);
                return;
            }
            else {
                salvaCliente(primo);
                salvaListaClienti((ListNode)l.tail());
            }
        }

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.