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

标签 java sorting

我有一个 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/

相关文章:

java - 在java中使用正则表达式来验证电子邮件

ruby - 获取哈希数组中所有键的列表

javascript - 在数组中查找元素并返回父元素

java - 推土机,如何忽略带有注释的字段

java - 同步跨线程共享的对象,但不能同时访问

objective-c - NSArray 的字符串排序问题

python - 如何通过函数按 ASCII 降序对单个字符串输出进行排序?

r - 按月订购数据框

java - 查找字符串中的子序列

java - GWT:如何计算碎片数量