Combinar la classificació amb ArrayList en Java : Java, arrays , ArrayList , mergesort , array – merge

Estic intentant de fusionar aquestes llistes d’arranjaments . list3 és l’últim. Tot funciona bé, però l’últim número , 400, no apareixerà en la matriu final. No tinc ni idea de per què o què fer. Estic tractant d’ordenar el ArrayList i estic gairebé llest excepte per l’últim nombre que no apareix .

import java.util.ArrayList;public class TextLab12st{public static void main(String args){int jsaList1 = {101, 105, 115, 125, 145, 165, 175, 185, 195, 225, 235, 275, 305, 315, 325, 335, 345, 355, 375, 385};int jsaList2 = {110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 270, 280, 320, 350, 400};Array list1 = new Array(jsaList1,"List #1");Array list2 = new Array(jsaList2,"List #2");Array list3 = new Array("Merged List");list3.merge(list1,list2,list3);list1.display();list2.display();list3.display();}}class Array{private ArrayList<Integer> list;private int size;private String listName;public Array(String ln){list = new ArrayList<Integer>();size = 0;listName = ln;}public Array(int jsArray, String ln){list = new ArrayList<Integer>();size = jsArray.length;listName = ln;for (int j = 0; j < size; j++)list.add( new Integer( jsArray ));}public void display (){System.out.println("n" + listName + ":n");System.out.println(list + "n");}public void merge(Array that, Array theOther, Array result){{// Merge both halves into the result array// Next element to consider in the first arrayint iFirst = 0;// Next element to consider in the second arrayint iSecond = 0;// Next open position in the resultint j = 0;// As long as neither iFirst nor iSecond is past the end, move the// smaller element into the result.while (iFirst < that.size && iSecond < theOther.size){if (that.list.get(iFirst) < theOther.list.get(iSecond)){result.list.add(that.list.get(iFirst));iFirst++;}else{result.list.add(theOther.list.get(iSecond));iSecond++;}j++;}}}

}

Respostes

4 per a la resposta № 1

després de l’ bucle que s’executa en dues matrius :

 while (iFirst < that.size && iSecond < theOther.size){if (that.list.get(iFirst) < theOther.list.get(iSecond)){result.list.add(that.list.get(iFirst));iFirst++;}else{result.list.add(theOther.list.get(iSecond));iSecond++;}j++;}

necessites veure si hi ha alguna cosa que queda en una de les matrius després que hagis arribat a la fi de l’altra :

if (iFirst < that,size) {//copy everything remaining in that to output} else if (iSecond < theOther.size) {//copy everything from theOther to output}

1 per a la resposta № 2

// this condition stops when you reach the end of either list// you need to continue until you reach the end of both listswhile (iFirst < that.size && iSecond < theOther.size)

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *