Манипулирование массивом Java

У меня есть функция с именем resize, которая принимает исходный массив и изменяет размеры до новых значений ширины и высоты. Метод, который я использую, я думаю, неэффективен. Я слышал, есть лучший способ сделать это. Во всяком случае, код ниже работает, когда масштаб является int. Тем не менее, есть вторая функция с именем half, где она использует resize, чтобы уменьшить изображение пополам. Поэтому я сделал scale двойным, и использовал typecast, чтобы преобразовать его обратно в int. Этот метод не работает, и я не знаю, в чем заключается ошибка (учитель использует свои собственные оценки и тестирует эти функции, а не передает их). Можете ли вы обнаружить ошибку, или есть более эффективный способ сделать функцию изменения размера?

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

Ответы на вопрос(3)

Ваш ответ на вопрос