Ciao a tutti,
devo fare il merge sort, mi da il problema facendo il debug, che i valori n1 e n2 risultano sempre a 0, come mai?
questo è il mio codice:
public class Esercizio3 {
public static LinkedList<Integer> ordina1 = new LinkedList<>();
public static LinkedList<Integer> ordina2 = new LinkedList<>();
public static LinkedList<Integer> merge = new LinkedList<>();
public int n1 = 0, n2 = 0;
public LinkedList<Integer> mergeOrdinato(LinkedList<Integer> sx, LinkedList<Integer> dx) {
sx = ordina1;
dx = ordina2;
if (merge.size() <= 1) { // se la lista è piccola non viene unita
System.out.println();
System.out.println("La lista è piccola non viene unita");
}
// separa
int dividi = merge.size() / 2;
for (int i = 0; i < dividi; i++) { // sinistra
ordina1.add(merge.remove(0)); // metti la prima metà a sinistra
}
while (merge.size() != 0) { // destra
ordina2.add(merge.remove(0)); // metti la seconda metà a destra
}
// unifica
merge.addAll(ordina1);
merge.addAll(ordina2);
// se c'è qualcosa nelle due liste aggiungi il minore al risultato e rimuovi dal
// suo elenco
while (ordina1.size() != 0 && ordina2.size() != 0) {
if (ordina1.get(0).compareTo(ordina2.get(0)) < 0)
merge.add(ordina1.remove(0));
else
merge.add(ordina2.remove(0));
}
// riempi il risulato ciò che rimane
while (ordina1.size() != 0)
merge.add(ordina1.remove(0));
while (ordina2.size() != 0)
merge.add(ordina2.remove(0));
return merge;
}
public LinkedList<Integer> ordinamento1(LinkedList<Integer> lo1) {
ordina1 = lo1;
lo1.add(n1);
Collections.sort(lo1);
return ordina1;
}
public LinkedList<Integer> ordinamento2(LinkedList<Integer> l2) {
ordina2 = l2;
l2.add(n2);
Collections.sort(l2);
return ordina2;
}
// stampa Integer di LinkedList ordinamento 1
public void stampaInteriOrdinamento1(Iterator<Integer> i) {
while (i.hasNext()) { // scorri gli elementi
System.out.print("<" + i.next() + ">"); // stampa ogni elemento di i
if (i.hasNext()) // scorrendo gli elementi
System.out.print(", "); // stampa la virgola
}
}
// stampa Integer di LinkedList ordinamento 2
public void stampaInteriOrdinamento2(Iterator<Integer> j) {
while (j.hasNext()) { // scorri gli elementi
System.out.print("<" + j.next() + ">"); // stampa ogni elemento di i
if (j.hasNext()) // scorrendo gli elementi
System.out.print(", "); // stampa la virgola
}
}
public void stampaMerge(Iterator<Integer> z) {
while (z.hasNext()) { // scorri gli elementi
System.out.print("<" + z.next() + ">"); // stampa ogni elemento di i
if (z.hasNext()) // scorrendo gli elementi
System.out.print(", "); // stampa la virgola
}
}
public void stampaOrdinamento1() {
LinkedList<Integer> list1 = new LinkedList<>();
ordina1 = ordinamento1(list1);
Iterator<Integer> iterator1 = ordina1.iterator();
stampaInteriOrdinamento1(iterator1);
}
public void stampaOrdinamento2() {
LinkedList<Integer> list2 = new LinkedList<>();
ordina2 = ordinamento2(list2);
Iterator<Integer> iterator2 = ordina2.iterator();
stampaInteriOrdinamento2(iterator2);
}
public void mergeOrdinamento1Ordinamento2() {
LinkedList<Integer> mIntegers = new LinkedList<>();
merge = mergeOrdinato(ordina1, ordina2);
Iterator<Integer>mergeIterator = merge.iterator();
stampaMerge(mergeIterator);
}
}
Questa è la classe main:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int od1 = 0;
int od2 = 0;
int dim1 = 0;
int dim2 = 0;
LinkedList<Integer> o1 = new LinkedList<>();
LinkedList<Integer> o2 = new LinkedList<>();
Esercizio3 esercizio3 = new Esercizio3();
System.out.println("Inserisci la dimensione dell'ordinamento 1: ");
dim1 = in.nextInt();
System.out.println("Inserisci elementi dell'ordinamento 1: ");
for (int i = 0; i < dim1; i++) {
od1 = in.nextInt();
o1.add(od1);
}
esercizio3.ordinamento1(o1);
esercizio3.stampaOrdinamento1();
System.out.println();
System.out.println("Inserisci la dimensione dell'ordinamento 2: ");
dim2 = in.nextInt();
System.out.println("Inserisci elementi dell'ordinamento 2: ");
for (int i = 0; i < dim2; i++) {
od2 = in.nextInt();
o2.add(od2);
}
esercizio3.ordinamento2(o2);
esercizio3.stampaOrdinamento2();
// Fai il merge è ordina gli elementi
System.out.println();
esercizio3.mergeOrdinato(o1, o2);
esercizio3.mergeOrdinamento1Ordinamento2();
}
Questo è il risultato che mi da nella console:
Inserisci la dimensione dell'ordinamento 1:
3
Inserisci elementi dell'ordinamento 1:
4 1 8
<0>
Inserisci la dimensione dell'ordinamento 2:
4
Inserisci elementi dell'ordinamento 2:
9 17 2 3
<0>
La lista è piccola non viene unita
<0>, <0>, <0>, <0>, <0>, <0>, <0>, <0>