Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java, two dimensional array sort

I'm quite new to Java, but getting into it. However, I can't wrap my head around why this example, which I found here, does not work:

At start of class:

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

In method:

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);
            }
        }
    }
}

Basically, what I want to do is have a two dimensional array where I store Y position of object on the screen and an image path also related to that object, then sort it by the Y position integer. This should allow me to paint elements to the screen in the correct order for an isometric perspective.

However, I keep getting this error:

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

Please help me, I've been twisting my brain for hours trying to understand why I get this error now.

like image 693
Magnus Avatar asked Jan 16 '13 20:01

Magnus


People also ask

Can you sort a 2 dimensional array in Java?

In Java, a 2D array can be sorted row-wise or column-wise as per requirements. For row-wise sorting, only the Array. sort() method is utilized; however, in column-wise sorting, the Array. sort() method is called with the Comparator interface.

How does sort work on 2D array?

Rearranges the rows or columns of a 2D array by sorting the elements in the specified column or row in ascending order. This VI rearranges the elements in the specified column or row in ascending order by comparing the elements using comparison rules for different data types.


1 Answers

Integer.valueOf(spritesPaint[0].toString()) is a single integer, however from your description it seems that you want to sort the strings in the 1-dimensional array spritesPaint[0] as if they were integers. Here is a modification that will do just that:

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);
    }
});

Alternatively, if you are trying to sort the first dimension of the array by the first element of the second dimension of the array, modify as follows:

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);
    }
});
like image 134
Alex DiCarlo Avatar answered Oct 11 '22 14:10

Alex DiCarlo