【发布时间】:2020-01-20 21:08:19
【问题描述】:
我正在尝试编写一种方法,该方法将随机添加项目到 ArrayList,然后根据添加的元素对其进行排序,但它无法正常工作。我在下面发布了我的代码,但我不知道为什么它不能正常工作。任何帮助将不胜感激。
public static void sortAndAdd(ArrayList<Integer> inL, int maxNumberOfElements) {
inL.clear();
inL.add(new java.util.Random().nextInt());
for (int i = 1; i < maxNumberOfElements - 1; i++) {
inL.add(new java.util.Random().nextInt(limit));
if (inL.get(i) > inL.get(i-1)) {
inL.set(i-1, inL.get(i));
inL.set(i, inL.get(i-1));
}
}
}
【问题讨论】:
-
“无法正常工作”究竟是什么意思。它发生了什么?
-
如果你想交换
a和b的值,你不能只写a=b; b=a;,因为这会覆盖a的值所以第二个任务不起作用。你需要写temp=a; a=b; b=temp;。它是一个标准的 swap 构造,而您没有使用它。 --- 此外,您不能在一次迭代中对数组进行排序。排序比这更复杂,程序员指南将整章都花在排序算法上。使用 Java 的内置排序方法,或开始阅读 Java 排序指南。 -
不要在循环中创建多个
Random对象。在循环之前创建一个然后使用它。创建多个将阻止良好的随机化,所以不要这样做。 --- 不要将列表的构建与排序混为一谈。首先构建列表,然后对其进行排序。它被称为关注点分离,随着您的代码变得越来越复杂,它会变得更加有用。 -
除了其他人所说的之外,没有理由将列表传递给您的
sortAndAdd方法,因为您会立即清除它。相反,让您的方法返回一个列表。然后在方法中声明新列表,并在完成添加和排序后返回它。 -
另一种可能性是遍历列表,直到找到大于要插入的值。然后只需向下滑动列表的其余部分并将新的直接插入到更大的列表之前。然后继续为下一个值重复此操作。
标签: java sorting arraylist add