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;
}
}