Java,二维数组排序

7

我很新于Java编程,但正逐渐入门。然而,我无法理解为什么这个例子(来自此处)不起作用:

在类开始时:

String[][] spritesPaint = new String[20][20];

在方法中:

for (int funct1 = 0; funct1 <= 2; funct1++) {
    if (funct1 == 0) {
        for (int funct2 = 0; funct2 < rEnemyNumber; funct2++) {
            spritesPaint[0][funct2] = new Integer(rEnemyY[funct2])
                    .toString();
            spritesPaint[1][funct2] = rEnemyGraphic[funct2];
        }
    } else if (funct1 == 1) {
        Arrays.sort(Integer.valueOf(spritesPaint[0].toString()),
                new Comparator<Integer[]>() {
                    @Override
                    public int compare(final Integer[] entry1,
                            final Integer[] entry2) {
                        final Integer time1 = entry1[0];
                        final Integer time2 = entry2[0];
                        return time1.compareTo(time2);
                    }
                });

    } else if (funct1 == 2) {
        for (int funct3 = 0; funct3 < rEnemyNumber; funct3++) {
            if (rEnemyCheck[funct3] == true) {
                nextPaint = getImage(base, rEnemyGraphic[funct3]);
                System.out.println("Next: " + nextPaint);

                g.drawImage(nextPaint, rEnemyX[funct3] + worldCenterX,
                        rEnemyY[funct3] + worldCenterY, this);
            }
        }
    }
}

基本上,我想做的是有一个二维数组,在其中存储对象在屏幕上的Y轴位置和与该对象相关的图像路径,然后按Y轴位置整数排序。这应该允许我以正确的顺序为等距透视画面绘制元素。

但是,我一直收到这个错误:

The method sort(T[], Comparator<? super T>) in the type Arrays 
is not applicable for the arguments (Integer, new Comparator<Integer[]>(){})

请帮助我,我已经苦思冥想数小时,试图理解为什么我现在会出现这个错误。


Arrays.sort() 的第一个参数必须是一个数组。你正在传递一个 Integer - jlordo
2
@BevynQ:不,Arrays.sort() 只接受一个数组作为它的第一个参数。 - jlordo
2个回答

4

Integer.valueOf(spritesPaint[0].toString())是一个整数, 从您的描述中可以看出,您想将一维数组spritesPaint [0]中的字符串按照它们代表的整数进行排序。以下是所需的修改:

Arrays.sort(spritesPaint[0], new Comparator<String>() {
    @Override public int compare(final String entry1, final String entry2) {
        final Integer time1 = Integer.valueOf(entry1);
        final Integer time2 = Integer.valueOf(entry2);
        return time1.compareTo(time2);
    }
});

如果您想按照数组第二维的第一个元素对数组的第一维进行排序,则可以按以下方式进行修改:

Arrays.sort(spritesPaint, new Comparator<String[]>() {
    @Override public int compare(final String[] entry1, final String[] entry2) {
        final Integer time1 = Integer.valueOf(entry1[0]);
        final Integer time2 = Integer.valueOf(entry2[0]);
        return time1.compareTo(time2);
    }
});

这让我感到困惑,为什么它没有运行。现在它可以运行了,但它并没有按照我所希望的方式对Y值进行排序。目前有四个值,它们的输出结果如下:Y: 450 Y: 600 Y: 550 Y: 500 ... 我是否还有其他做错的地方? - Magnus
啊,不,我想我弄明白了。我的错! :) - Magnus

3
错误消息意味着,你传递了一个整数,而不是类型为T(泛型)的数组。所以,在你的代码中,当出现以下情况时:

原文:

The error message means that, instead of passing an Array of type T (generic), you are passing an Integer. So, where you have:
Arrays.sort(Integer.valueOf(spritesPaint[0].toString()), ...

您想要传入

Arrays.sort(arrayToBeSorted, ...

(此外,你的变量名可以更好,因为我真的不明白这个示例在做什么......)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接