当前位置: 首页 > 知识库问答 >
问题:

Java为不同方向迭代数组

叶鸿
2023-03-14

我从一个布局数组中拼接了一个位图,它将一个更大的位图作为指导。在一个位图中使用多个位图。我旋转整个位图时,我的解决方案是重新绘制它,但要让数组考虑这个旋转。位图的制作由数组的顺序决定。缝合假定数组从零开始,即第一个索引或最左上角,然后向右到最后,再到下一行的开始。我想有一个90、180、270和360功能可以调用。我想360很容易,我倒着迭代。我用的是11乘11,这是常数。

例如

0, 1, 3, 4
5, 6, 7, 8,
9, 10, 11, 12
13, 14, 15, 16

当我旋转90度

4, 8, 12, 16
3, 7, 11, 15
1, 6, 10, 14
0, 5, 9,  13

共有1个答案

仰翰采
2023-03-14

试试这个。这可能会影响性能,但这是一个简单的解决方案。

import java.util.Arrays;

public class RotateMatrix {

    public static void main(String[] args) {
        int original[][] = { { 0, 1, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 },
                { 13, 14, 15, 16 } };

        printArray(original);
        System.out.println("After 90 Degree");
        printArray(rotate(original, 90));
        System.out.println("After 180 Degree");
        printArray(rotate(original, 180));
        System.out.println("After 270 Degree");
        printArray(rotate(original, 270));
        System.out.println("After 360 Degree");
        printArray(rotate(original, 360));
    }

    private static int[][] rotate(int[][] original, int angle) {

        int[][] output = original;
        int times = 4 - angle/90;

        for(int i=0; i<times; i++){
            output = rotate(output);
        }

        return output;
    }

    private static int[][] rotate(int[][] original) {

        int n = original.length;
        int m = original[0].length;
        int[][] output = new int[m][n];

        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                output[j][n - 1 - i] = original[i][j];
        return output;
    }

    private static void printArray(int[][] array) {
        for (int i = 0; i < array.length; i++) {
            System.out.println(Arrays.toString(array[i]));
        }
    }

}

这将逆时针旋转阵列,就像在示例中一样。然而,如果你想将其改为顺时针方向,只需改变int times=4-角度/90 到<代码>整数倍=角度/90 旋转(int[]原始,int角度)方法中。

 类似资料:
  • 我正在为我的作业创建一个基于文本的游戏。我可以做任何事情,除了在房间之间移动,使用方向:北,南,东和西。我没怎么接触过字典,我在努力。我不明白如何做到这一点,尤其是在有两个不同方向的卧室里。方向:游戏应该提示玩家输入在房间之间移动的命令#字典将一个房间链接到其他房间。

  • 问题内容: 如何从最后一项到第一个迭代一个项目? 问题答案: 如果要继续使用集合,可以使用以下方法: 如果您可以改用数组,则可以看一下answer。

  • 我有两个长度不同的< code>Vec,例如: 我想成对迭代它们,打印: 我可以使用< code>Iterator::zip来获得在< code>xs和< code>ys中具有匹配元素的对: 但是对于“不匹配”位,我需要复杂的代码来检查长度并从其余部分中提取一部分。 我想要一个完全基于迭代器的解决方案,所以我尝试了: 这是不正确的,因为第一个循环跳过了在另一个列表中没有匹配的第一个元素(x=4)。

  • 问题内容: 为什么接口不扩展? 该方法可以简单地返回。 是故意的还是对Java设计师的监督? 能够将循环与这样的迭代器一起使用将很方便: 其中返回迭代器。 问题答案: 因为迭代器通常指向集合中的单个实例。Iterable意味着可以从一个对象获得迭代器以遍历其元素-无需迭代单个实例(迭代器代表的是该实例)。

  • 问题 你想反方向迭代一个序列 解决方案 使用内置的 reversed() 函数,比如: >>> a = [1, 2, 3, 4] >>> for x in reversed(a): ... print(x) ... 4 3 2 1 反向迭代仅仅当对象的大小可预先确定或者对象实现了 __reversed__() 的特殊方法时才能生效。 如果两者都不符合,那你必须先将对象转换为一个列表才行,比

  • 本文向大家介绍JS的数组迭代方法,包括了JS的数组迭代方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS的数组迭代方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。