【问题标题】:Horizontal Transformation of Array (2D)阵列的水平变换 (2D)
【发布时间】:2015-03-23 17:27:11
【问题描述】:

水平和/或垂直翻转图像很简单。前提是给定一个通过导入图片创建的二维整数数组,我必须创建一个带有 int[][] 参数的方法并在返回 void 之前将其水平翻转。

语法如下:

public static void horizontalFlip(int[][] imgArray)
    {
        int temp;
        for (int i = 0; i < imgArray.length; i++)
        {
            for (int j = 0; j < imgArray[i].length / 2; j++)
            {
                temp = imgArray[i][j];
                imgArray[i][j] = imgArray[imgArray.length - 1 - i][j];
                imgArray[imgArray.length - 1 - i][j] = temp;
            }
        }
    }

我使用 imgArray 作为数组参数并使用 temp 作为占位符,而循环交换像素,或者更确切地说,这就是目的。目前窗口在提示翻转后什么都不做。有人可以帮我找出逻辑或语法的问题吗?

提前致谢,请说明我应该提供的任何详细信息 附言我可以确认未引用的提供的代码可以正常工作并经过测试。

【问题讨论】:

  • 真的什么都没发生吗?对我来说,好像你做了一种翻转。您是否尝试过翻转非对称图像?

标签: java multidimensional-array transformation


【解决方案1】:

这是因为您使用的是i 而不是j。但是i中途不会停止,而是继续并重新交换数组。
这是一个正确的代码:

for (int i = 0; i < imgArray.length; i++) {
    for (int j = 0; j < imgArray[i].length / 2; j++) {
        temp = imgArray[i][j];
        imgArray[i][j] = imgArray[i][imgArray.length - 1 - j];
        imgArray[i][imgArray.length - 1 -j] = temp;
    }
}

或者如果你想交换列,而不是行:

for (int i = 0; i < imgArray.length / 2; i++) {
    for (int j = 0; j < imgArray[i].length; j++) {
        temp = imgArray[i][j];
        imgArray[i][j] = imgArray[imgArray.length - 1 - i][j];
        imgArray[imgArray.length - 1 -i][j] = temp;
    }
}

【讨论】:

  • 哦,我明白了。我猜应该更细心一点。有趣的是,该程序似乎与您添加的第二位代码(垂直翻转)一起工作得很好,但是第一位导致索引异常。编译器似乎指向第 10 行,即 imgArray[i][j] = imgArray[i][imgArray.length - 1 - j];如果宽度和高度不相等,会发生这种情况吗?
  • 根据提供的代码,i 应用于 heightj 应用于 width。然后它将起作用,无论尺寸是否相等。 @user3072912
【解决方案2】:

这将正确地水平翻转图像:

public static void horizontalFlip(int[][] imgArray)
{
    int temp;
    for (int i = 0; i < imgArray.length; i++) {
        for (int j = 0; j < imgArray[i].length/2; j++) {
        temp = imgArray[i][j];
        imgArray[i][j] = imgArray[i][imgArray[i].length - 1 - j];
        imgArray[i][imgArray[i].length - 1 - j] = temp;
        }
    }
}

【讨论】:

    【解决方案3】:

    请看下面我的解决方案,

    for(int i=0; i<matrix.length / 2; i++)
    {
        int[] row = matrix[i];
        int[] temp = row;
        matrix[i] = matrix[matrix.length - 1];
        matrix[matrix.length - 1] = row;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 2021-08-08
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多