【问题标题】:flipping a multi-dimensional array java翻转多维数组java
【发布时间】:2013-02-21 16:24:17
【问题描述】:

我有一个类可以创建具有所需宽度和高度的字符画布。

其中我有一个方法 drawLetter() (它基本上改变了字符,使一个字母出现在画布上(就像非常简单的 ASCII 艺术)

我还有其他 3 个方法 rotateClockwise、flipHorizo​​ntal 和 flipVertical

rotate 和 flipHorizo​​ntal 我做得很好,它们工作但我似乎无法弄清楚我在垂直翻转数组时出错的地方(出于兴趣,我认为我的水平和垂直方向错误,但我放了一个样本我想在下面完成什么)

这是我无法解决的问题:

这个:

# # # ~
~ # ~ ~
~ # ~ ~
~ ~ ~ ~

到这里:

~ # # #
~ ~ # ~
~ ~ # ~
~ ~ ~ ~

显然它将像我的其他方法一样在for循环中完成,下面我将发布我已经为水平方向完成的方法并顺时针旋转以证明它不是我做不到的作业

void mirrorHorizontally()
{
    char[][]horizontalImage = new char[height][width];

    for (int i = 0; i < height /2; i++)
    { 
       for(int j = 0; j < width; j++)
       {  
           horizontalImage[height - (i+1)][j] = canvasArray[i][j];           
           horizontalImage[i][j] = canvasArray[height - (i+1)][j];
       }
    }   
    printPicture(horizontalImage);
}


void rotateClockwise()
{
    char[][] rotatedImage = new char[height][width];

    for(int i=0; i< canvasArray.length; i++)
    {
        for(int j= canvasArray.length-1; j >= 0; j--)
        {
            rotatedImage[i][rotatedImage.length-1-j] = canvasArray[j][i]; 
        }
    }

    printPicture(rotatedImage);
}

canvasArray 是 char[][] 类变量中不感兴趣的原始图像

【问题讨论】:

  • 你的问题是什么?交换是否无法正常工作?
  • 老实说,我只是不知道如何为这种值交换构建 for 循环
  • iv 在使用 2D char[] 之前使用字符串数组等完成它以使其工作,但我试图通过使用多维数组来使这个简单的应用程序更好
  • 本质上和mirrorHorizontally()一样,只是有高宽反转的访问模式。但是,您可能需要考虑为此使用标准库:Apache 的 ArrayUtils 有一个 reverse(...) 方法,可用于不同级别的数组。
  • 谢谢,但我没有使用库,这不是我想要的更多功能,这似乎是一个很好的例子,可以学习多维数组的工作原理

标签: java arrays multidimensional-array


【解决方案1】:

这应该适合您的需求:

public static char[][] mirror(int width, int height, char[][] in) {
    char[][] out = new char[height][width];
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            out[i][width - j - 1] = in[i][j];
        }
    }
    return out;
}

例如:

char[][] in = new char[][] {
    new char[] { '#', '#', '#', '~' },
    new char[] { '~', '#', '~', '~' },
    new char[] { '~', '#', '~', '~' },
    new char[] { '~', '~', '~', '~' },
    new char[] { '~', '~', '~', '~' }
};

for (char[] line : mirror(4, 5, in)) {
    for (char row : line) {
        System.out.print(row);
    }
    System.out.println();
}

打印:

~###
~~#~
~~#~
~~~~
~~~~

【讨论】:

  • +1,看完这篇就不贴我复杂的方法了;)
  • 非常感谢,这正是我想要的。与我在以前的方法中所做的完全一样的风格,这只是我看了太久而没有看到明显的那些时间之一,再次感谢
猜你喜欢
  • 2016-11-16
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2015-01-06
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多