void方法中使用的void方法的组成? (Java)

Composition of void method used in void method? (Java)

我大约 2 周前开始学习 Java,所以请不要挑剔。 我正在用一个二维数组(一张图片)做这个程序,我想旋转 90 度(已经完成,测试,它有效)和 180。我的方法是无效的,我想使用 90 度在 180 度中两次(组合?),但它不起作用。

这是我的90后方法:

public void rotate90(){
        for (int r = 0; r < w; r++) {
             for (int c = 0; c < h; c++) {
                 imageMatrix[c][w-r-1] = imageMatrix[r][c];
             }
        }

public void rotate180(){ 
        rotate90(rotate90()); // my idea was to rotate again the already rotated matrix, but since rotate90 is void it doesn't work
}

我有办法做到这一点吗?使用 void 函数?

提前致谢!

方法 rotate90() 没有参数。其实这不是正确的做法。

第一种方式写出来

rotate90();
rotate90();

或使用for-cycle

for (int i=0; i<2; i++) {
    rotate90();
}

然而,这里有一种方法可以只用一种方法将它旋转多少次:

public void rotate90(int n) {
    for (int i=0; i<n; i++) {
        for (int r=0; r<w; r++) {
            for (int c=0; c<h; c++) {
                imageMatrix[c][w-r-1] = imageMatrix[r][c];
            }
        }
    }

然后是rotate180()方法:

public void rotate180(){ 
    rotate90(2); // rotate by 90 two times
}

您只需调用该方法两次即可。您不能做的是使用 rotate90 的 return 值调用 rotate90(),这是您建议的代码正在执行的操作,因为该方法不接受参数或 return一个值。

如果只想调用一次,可以作为参数传递

public void rotate90nTimes(int n){
    for (int times = 0; times < n; times++) {
        for (int r = 0; r < w; r++) {
             for (int c = 0; c < h; c++) {
                 imageMatrix[c][w-r-1] = imageMatrix[r][c];
             }
        }
    }
}

p.s.: 如果您确实想将其用作 rotate90(rotate90),则需要 return 矩阵而不是使函数无效。

您的 rotate90() 直接在全局变量上工作,因此您的 rotate180() 也会。

public void rotate180(){ 
    rotate90();
    rotate90();
}

但是,我建议您使用一些参数和 return 值,仅在绝对必要时才使用全局变量。另外,我不确定你的算法是否正确,我会这样做。

public static int[][] rotate90(int[][] matrix){
    int [][] newMatrix = new int[matrix[0].length][matrix.lenght];

    for (int r = 0; r < w; r++) {
         for (int c = 0; c < h; c++) {
             newMatrix[c][w-r-1] = matrix[r][c];
         }
    }
    return newMatrix;
}

public static int[][] rotate180(){ 
    return rotate90(rotate90()); 
}

不需要将它们设置为 static,但由于它们不需要对象来工作,您可以将它们移动到 Utils class 或其他东西。