Unificazione liste

di il
2 risposte

Unificazione liste

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>

2 Risposte

  • Re: Unificazione liste

    Salve a tutti,

    ho risolto, comunque vi ringrazio lo stesso, anche se non mi avete risposto
  • Re: Unificazione liste

    robot ha scritto:


    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;
    
    Mah ... non è comunque molto chiaro ....
    Ed è pure "dubbio" il fatto dell'assegnare un campo (es. ordina1) AL parametro (sx).
Devi accedere o registrarti per scrivere nel forum
2 risposte