public class Ex_Confronta2Liste {
public static void main(String[] args) {
//creo 4 liste
Lista[] liste = new Lista[4];
for (int k=0; k<liste.length; k++)
liste[k] = new Lista();
/*
riempimento delle liste nel seguente modo:
liste[0] -> lista con 10 nodi di valori casuali
liste[1] -> lista con 10 nodi con valori diversi da liste[0]
liste[2] -> lista con 10 nodi con valori uguali a liste[0]
liste[3] -> lista con 9 nodi con valori uguali a liste[0]
*/
int cas;
for (int k=0; k<10; k++) {
cas = (int)(Math.random()*50 + 1);
liste[0].InsertOrdered(cas);
liste[1].InsertOrdered((int)(Math.random()*50 + 1));
liste[2].InsertOrdered(cas);
if (k<9) liste[3].InsertOrdered(cas);
}
//Stampa i contenuti delle liste
for (int k=0; k<liste.length; k++)
Stampa(liste[k]);
/* Confronta le liste in tutte le combinazioni
N.d.P: la possibilità di usare il codice sottostante
(cicli annidati per ottenere le combinazioni dei confronti)
mi ha indotto ad adottare un array di oggetti Lista.
Risulterà che solo liste[0] e liste[2] sono uguali.
*/
System.out.println("\nLe liste a confronto...");
for (int i=0; i<liste.length-1; i++)
for (int j=i+1; j<liste.length; j++)
System.out.println("lista " + i + " e' uguale a lista " + j + "? " +
IsEqual(liste[i], liste[j]));
}
//metodo per la stampa della lista
public static void Stampa(Lista l) {
System.out.println("\nLista dei valori contenuti nella lista " + l);
int count=0;
l.rewind();
try {
for (;;) System.out.println(++count + ") " + l.getNextElem());
} catch (BottomOfListException e) {
System.out.println("Fine Lista!!");
}
}
/* ******************************************
***** Metodo oggetto dell'esercizio ******
******************************************
*/
public static boolean IsEqual(Lista a, Lista b) {
//restituisce true se le liste a e b contengono gli stessi valori
//le due liste "riavvolte"
a.rewind();
b.rewind();
int i=0, j;
do {
try {
//prendo valore di "a" e lo controllo
i = a.getNextElem();
} catch(BottomOfListException e) {
try {
//eccezione? (lista "a" finita), allora controllo lista "b"
j = b.getNextElem();
} catch(BottomOfListException e1) {
//eccezione? (anche lista "b" finita): allora le liste sono UGUALI!!
return true;
}
}
//Qui sicuramente un elemento della lista "a" è stato preso!!
try {
//prendo valore di "b" e lo controllo
j = b.getNextElem();
} catch(BottomOfListException e) {
//eccezione? (lista "b" finita) allora le liste non sono uguali
return false;
}
} while (i == j); //"cicla" finchè trovi elementi uguali
//uscito dal ciclo? allora le liste non sono uguali
return false;
}
}