我正在尝试合并这些ArrayLists。 list3是最后一个。一切都运行正常,但最后一个数字,400,不会出现在最后一个数组中。我不知道为什么或做什么。我正在尝试将ArrayList排序,我几乎已经完成了,除了最后一个不会显示的数字。
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[j] ));
}
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 array
int iFirst = 0;
// Next element to consider in the second array
int iSecond = 0;
// Next open position in the result
int 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++;
}
}
}
}
答案 0 :(得分:4)
在两个数组上运行的循环之后:
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++;
}
你需要看看在你到达另一个阵列后,其中一个阵列中是否还有剩余的东西:
if (iFirst < that,size) {
//copy everything remaining in that to output
} else if (iSecond < theOther.size) {
//copy everything from theOther to output
}
答案 1 :(得分:1)
// this condition stops when you reach the end of either list
// you need to continue until you reach the end of both lists
while (iFirst < that.size && iSecond < theOther.size)