我需要编写一个方法来对ArrayList进行升序排序,而无需使用任何内置库或方法(不包括java.util.ArrayList
,它可能用于允许ArrayList,但仅此而已)。我下面有几乎完整的代码,但是.remove()
函数似乎无法正常工作;它什么也不做,并且ArrayList最终成为在ArrayList的整个大小中重复的最小元素。我尝试用更新段为tempDataCopy.remove(smallestElementIndex)
的for循环替换while循环,但它给出了多个错误,说.remove()函数具有“未知源”。我该如何解决?
public static ArrayList<Integer> sortUp(ArrayList<Integer> data) {
ArrayList<Integer> increasingArray = new ArrayList<Integer>();
ArrayList<Integer> tempDataCopy = data;// tempDataCopy was created so that elements may be deleted without affecting the actual ArrayList data
int smallestElement = tempDataCopy.get(0);
int smallestElementIndex = 0;
while (tempDataCopy.size() > 0) {
for (int i = 0; i < tempDataCopy.size(); i++) {
if (tempDataCopy.get(i) < smallestElement) {
smallestElement = tempDataCopy.get(i);
smallestElementIndex = i;
} // end if statement
} // end for loop
increasingArray.add(smallestElement);
tempDataCopy.remove(smallestElementIndex);
} // end while loop
return increasingArray;
}// end sortUp
很抱歉,如果重复的话,我搜索了几个小时,却找不到另一个类似排序的示例。
答案 0 :(得分:0)
public static ArrayList<Integer> sortUp(ArrayList<Integer> data) {
ArrayList<Integer> increasingArray = new ArrayList<Integer>();
ArrayList<Integer> tempDataCopy = new ArrayList<>(data);// tempDataCopy was created so that elements may be deleted without affecting the actual ArrayList data
// moved initialization of smallestElement in while loop
while (tempDataCopy.size() > 0) {
int smallestElement = tempDataCopy.get(0);
int smallestElementIndex = 0;
for (int i = 1; i < tempDataCopy.size(); i++) {
if (tempDataCopy.get(i) < smallestElement) {
smallestElement = tempDataCopy.get(i);
smallestElementIndex = i;
} // end if statement
} // end for loop
increasingArray.add(smallestElement);
tempDataCopy.remove(smallestElementIndex);
} // end while loop
return increasingArray;
}// end sortUp
这会将最小元素重置为每个while循环迭代的第一个元素。对于此示例,您发生了错误:4、3、2、1。
第一次while循环迭代后,您的tempDataCopy如下所示:4,3,2
但是您的minimumElement仍然为1,并且在下一次迭代中找不到较小的值。因此,您要再次添加1并尝试删除索引3中不再存在的元素
关于您的错误,我不认为错误提示remove方法是未知的,但是要删除的元素不存在。
答案 1 :(得分:0)
您必须删除此代码并将其放入if条件中。
increasingArray.add(smallestElement);
tempDataCopy.remove(smallestElementIndex);