Java Array Manipulation

Ich habe eine Funktion namens resize, die ein Quell-Array annimmt und die Größe auf neue Breiten und Höhen ändert. Die Methode, die ich benutze, ist meiner Meinung nach ineffizient. Ich habe gehört, dass es einen besseren Weg gibt. Auf jeden Fall funktioniert der folgende Code, wenn scale ein int ist. Es gibt jedoch eine zweite Funktion namens half, bei der die Größe geändert wird, um ein Bild in zwei Hälften zu verkleinern. Also habe ich die Skalierung zu einem Double gemacht und mit einem Typecast wieder in ein Int konvertiert. Diese Methode funktioniert nicht und ich weiß nicht, was der Fehler ist (der Lehrer verwendet seine eigene Benotung und testet diese Funktionen und gibt sie nicht weiter). Können Sie den Fehler erkennen oder gibt es eine effizientere Möglichkeit, eine Größenänderungsfunktion durchzuführen?

public static int[][] resize(int[][] source, int newWidth, int newHeight) {

        int[][] newImage=new int[newWidth][newHeight];
        double scale=newWidth/(source.length);
        for(int i=0;i<newWidth/scale;i++)
            for(int j=0;j<newHeight/scale;j++)
                for (int s1=0;s1<scale;s1++) 
                    for (int s2=0;s2<scale;s2++) 
                        newImage[(int)(i*scale+s1)][(int)(j*scale+s2)] =source[i][j];

        return newImage; 
    }

    /**
     * Half the size of the image. This method should be just one line! Just
     * delegate the work to resize()!
     */
    public static int[][] half(int[][] source) {
        int[][] newImage=new int[source.length/2][source[0].length/2];
        newImage=resize(source,source.length/2,source[0].length/2);
        return newImage;
    }

Antworten auf die Frage(6)

Ihre Antwort auf die Frage