gpt4 book ai didi

Java插入排序对象的数组列表?

转载 作者:行者123 更新时间:2023-11-29 09:48:00 27 4
gpt4 key购买 nike

我有一个 Card 类,它包含值 (int)、花色 (String) 和 faceValue (String)。似乎 Card.value 上的常规插入排序应该可以正常工作。我只是在移动东西时使用整个对象。出于某种原因,这会崩溃和燃烧。它最终将最高的卡片复制到每个元素中,除了我无法理解的随机元素。

value、suit 和 faceValue 也是公开的。

这是我的代码:

public static void insertionSort(ArrayList<Card> Array) {

int i,j;
Card key = new Card(0, "","");

for (i = 1; i < Array.size(); i++) {
key.value = Array.get(i).value;
key.suit = Array.get(i).suit;
key.faceValue = Array.get(i).faceValue;
j = i;
while((j > 0) && (Array.get(j - 1).value > key.value)) {
Array.set(j,Array.get(j - 1));
j--;
}
Array.set(j,key);
}


}

我对照维基百科的伪代码检查了这个,我找不到任何根本的区别。我已经通过调试器十几次了,我看不出有任何理由让编译器做它正在做的事情。有谁知道为什么它不起作用?

谢谢。

最佳答案

我想扩展 ginz 的回答。

Java 对象通过引用传递。因此,您正在更改一个对象并将其设置为多个索引。

可视化(之前之后):

visual representation

对于之后:请注意并非所有索引都必须引用同一个对象。其中一些可以保持不变。


更好的方法是移动对象,而不是尝试复制它们。

此外,根据 Java 标准,属性(变量)的名称应始终以小写字母开头。

这是工作代码:

public static void insertionSort(ArrayList<Card> array) {
int i, j;
for (i = 1; i < array.size(); i++) {
Card tmp = array.get(i);
j = i;
while ((j > 0) && (array.get(j - 1).value > tmp.value)) {
array.set(j, array.get(j - 1));
j--;
}
array.set(j, tmp);
}
}

关于Java插入排序对象的数组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23503921/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com