我需要编写一个方法来按升序对 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
抱歉,如果这是重复的,我搜索了几个小时,但找不到类似排序的另一个示例。
您必须删除此代码并将其放入 if 条件中。
increasingArray.add(smallestElement);
tempDataCopy.remove(smallestElementIndex);
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
但是你的最小元素仍然是 1,并且你在下一次迭代中找不到更小的值。因此,您再次添加 1 并尝试删除索引 3 处的元素,该元素不再存在
关于您的错误,我不认为错误表明删除方法未知,而是要删除的元素不存在。
import java.util.*;
public class listSort {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(1);
list.add(5);
list.add(8);
list.add(2);
list.add(7);
System.out.println("Original list is " + list);
for (int i = 0; i < list.size() - 1; i++) {
int min = i;
for (int j = i + 1; j < list.size(); j++) {
if (list.get(j) < list.get(min)) {
min = j;
}
}
// Swap the found minimum element with the first element
int temp = list.get(min);
list.set(min, list.get(i));
list.set(i, temp);
}
System.out.print("Sorted Arraylist is "+list)
}
}