Combine o ranking com ArrayList em Java: Java, Array, ArrayList, MergeSort, Array-Mesclar

Estou tentando mesclar essas listas de arranjo. List3 é o último. Tudo funciona bem, mas o último número, 400, não aparecerá na matriz final. Eu não tenho ideia de por que ou o que fazer. Estou tentando encomendar o arraylist e estou quase pronto, exceto pelo último número que não aparece.

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

}

Respostas

4 para a resposta № 1

Após o loop em execução em ambas as matrizes:

Você precisa ver se há algo que permanece em uma das matrizes depois de ter chegado ao fim do outro:

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

1 para a 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)

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *