Lista valori booleani

di il
1 risposte

Lista valori booleani

Salve ragazzi sto cercando di fare questo esercizio sulle liste....Credo di aver sbagliato qualcosa sul metodo ricorsivo (quello iterativo spera sia giusto )....potresti aiutarmi per favore ?

Si definisca la classe Lista che rappresenta una lista di booleani concatenata tramite riferimenti.
Nella classe Lista si definisca:
• il costruttore che, dato un intero n, costruisce una lista di n valori booleani casuali
• un metodo iterativo che calcola in modo efficiente l'OR esclusivo degli elementi della lista (cioè
restituisce true se la lista contiene esattamente un valore true, altrimenti restituisce false).
• la versione ricorsiva del metodo sopra.
Si realizzi infine una applicazione che:
• definisce una lista di 30 elementi
• Stampa a video l'OR esclusivo degli elementi calcolato con il metodo iterativo
• Stampa a video l'OR esclusivo degli elementi calcolato con il metodo ricorsivo
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package esercizio2;

/**
 *
 * @author Marco
 */
public class Esercizio2 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Lista list= new Lista(30);
        
        System.out.println("Verifica OR eslusivo iteriativo: "+ list.calcola());
        System.out.println("Verifica OR eslusivo ricorsivo: "+ list.calcolaRic());
    }
    
}


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package esercizio2;

import java.util.Random;

/**
 *
 * @author Marco
 */
public class Lista {
    
 Elemento testa = null;

    public Lista(int n) {
        Random r = new Random();
        for (int i = 0; i < n; i++) {
            testa = new Elemento(r.nextBoolean(), testa);
        }
    }

    public boolean calcola() {
        
        for (Elemento e = testa; e != null; e = e.successivo) {
            if (e.n == true) {
                return true;
            }
        }
       return false;
    }

    public boolean calcolaRic() {
        return calcolaRic( testa);
    }


    public boolean calcolaRic( Elemento testa) {
        if (testa == null) {
            return false;
        } else {
            calcolaRic(testa.successivo);
            if (testa.n == true) {
                return true;
            }
            return false;
        }
    }

}
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package esercizio2;

/**
 *
 * @author Marco
 */
public class Elemento {
    
    boolean n;
    Elemento successivo;

    public Elemento(boolean n, Elemento successivo) {
        this.n = n;
        this.successivo = successivo;
    }
}

1 Risposte

  • Re: Lista valori booleani

    Ciao, ti dico un po dove credo ci sia qualche problema...
    Innanzi tutto nel costruttore della lista, ho notato che all'interno del ciclo for assegni tutti gli elementi alla variabile "testa", così facendo però alla fine del ciclo avrai che quella variabile contiene l'ultimo elemento, ciò comporta che qualsiasi algoritmo eseguirai lì sopra vedrà la lista che conterrà solo l'ultimo elemento.
    Per quanto riguarda invece i due metodi che hai scritto, controllano se la lista contiene almeno un elemento true (almeno quello iterativo, quello ricorsivo ha qualche problemino) mentre leggendo la traccia pare di aver capito che deve contenerne esattamente uno.
    Per quello iterativo avresti bisogno di un ulteriore controllo e non fermarti al primo valore true che trovi. Una volta che hai trovato un valore true, devi assicurarti che quelli successivi siano tutti false.
    Per quello ricorsivo invece il grosso problema che vedo è che non utilizzi il ritorno della chiamata a funzione calcolaRic(testa.successivo), così facendo stai ignorando tutto ciò che è avvenuto mentre veniva esaminata la lista, ed avrai come ritorno true se la testa è true, false altrimenti o se è null.
Devi accedere o registrarti per scrivere nel forum
1 risposte