J’essaie de fusionner ces listes d’arrangement. List3 est le dernier. Tout fonctionne bien, mais le dernier numéro, 400, n’apparaîtra pas dans la matrice finale. Je ne sais pas pourquoi ou quoi faire. J’essaie de commander le tableau et je suis presque prêt à l’exception du dernier numéro qui n’apparaît pas.
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++;}}}
}
Réponses
4 pour la réponse № 1
Après la boucle exécutée sur les deux matrices:
Vous devez voir s’il y a quelque chose qui reste dans l’une des matrices après avoir atteint la fin de l’autre:
if (iFirst < that,size) {//copy everything remaining in that to output} else if (iSecond < theOther.size) {//copy everything from theOther to output}
1 pour la réponse № 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)