java - 我的 java 选择排序算法有什么问题?
问题描述
更新:我已经将交换方法换成了 Collection.swap 方法,现在一切正常。谢谢您的帮助。
我有一个选择排序算法,旨在根据年龄对篮球运动员进行排序。programPlayerList 是一个未排序的篮球运动员数组列表,该列表是从已从网络抓取的 CSV 中获取的。programSortedPlayerList 是一个数组列表,用于根据他们的排序年龄来保存玩家。swap 是一种交换玩家对象的方法。但是,当我运行代码时,玩家并没有正确排序。我的代码有什么问题?
public static ArrayList<Player> sortByAge() {
for(int i = 0; i < programPlayerList.size(); i++) {
programSortedPlayerList.add(programPlayerList.get(i));
}
for(int i = 0; i < programSortedPlayerList.size()-1; i++) {
int indexofmin = i;
for(int j = i+1; j < programSortedPlayerList.size(); j++) {
if(programSortedPlayerList.get(j).getAge() < programSortedPlayerList.get(indexofmin).getAge()) {
indexofmin = j;
}
}
swap(programSortedPlayerList.get(i), programSortedPlayerList.get(indexofmin));
}
return programSortedPlayerList;
}
解决方案
您的电话swap
不会将任何内容更改为programSortedPlayerList
.
传递给的参数swap
不会被它修改。只要将新对象分配给任一参数变量,您就只会产生局部效果。调用代码不会看到传递的对象有任何变化。这就是“按值调用”的原则:对象(引用)被传递给swap
,但无论如何swap
,它不能改变调用者的引用。
为了改变元素的顺序,programSortedPlayerList
你必须programSortedPlayerList.set
在某个时候调用。
例如:
public static void swap(ArrayList<Player> playerList, int i, int j) {
Player temp = playerList.get(i);
playerList.set(i, list.get(j));
playerList.set(j, temp);
}
...并调用为:
swap(programSortedPlayerList, i, indexofmin);
推荐阅读
- python - Pygame Error getting list index out of range 但我不知道如何解决(我是新手)
- python - 解析亚马逊(Python)
- powershell - Powershell:从每个用户那里获取所有日历权限
- javascript - npm WARN Laravel 错误不允许我在本地主机上实现 CSS
- tmux - 启用鼠标模式后,如何从 tmux 中的主要选择粘贴鼠标中键?
- python - CSS 未正确应用,看起来不对
- angular - 赛普拉斯自定义命令在没有 --watch 的情况下运行时不起作用
- google-sheets - 谷歌电子表格时间线图
- mysql - 如何通过 MYSQL 查看单列中的值列表
- git - 由于 pathspec,ReadTheDocs 构建失败