有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将一维数组的内容传输到二维数组

我试图制作一个加密程序,用户输入一条信息,然后将“字母转换成数字”

例如,用户输入一个ABCD作为他的消息。转换后的数字将是1 2 3 4,数字存储在一维整数数组中。我想做的是使用二维数组将其放入一个2x2矩阵中

以下是我的代码片段:

       int data[] = new int[] {10,20,30,40};

       *for(i=0;i<2;i++)
        {
            for(j=0;j<2;j++)
            {
                for (int ctr=0; ictr<data.length(); ictr++){
                a[i][j] = data[ctr];}
            }
        }

我知道代码有问题,但我真的迷路了

如何将其输出为以下内容

10 20 
30 40

(而不是仅仅10,20,30,40


共 (2) 个答案

  1. # 1 楼答案

    这里有一种方法。这不是唯一的办法。基本上,对于输出中的每个单元格,计算初始数组的相应索引,然后进行赋值

    int data[] = new int[] {10, 20, 30, 40, 50, 60};
    int width = 3;
    int height = 2;
    
    int[][] result = new int[height][width];
    
    for(int i = 0; i < height; i++) {
        for(int j = 0; j < width; j++) {
            result[i][j] = data[i * width + j];
        }
    }
    
  2. # 2 楼答案

    您的代码是接近,但不太正确。具体来说,最里面的循环(带有ctr的循环)并没有完成多少工作:它实际上只是重复地将当前a[i][j]设置为一维数组中的每个值,最终以每个单元格中数组中的最后一个值结束。你的主要问题是对如何ctr进入这些循环感到困惑

    这里有两种常见的方法来说明你要做的事情。我做的一般假设是,你想把长度为L的数组打包成MxN2D数组,其中M x N=L

    第一种方法是迭代二维数组,从一维数组中提取适当的值。例如(我用mN来表示以下尺寸):

    for (int i = 0, ctr = 0; i < M; ++ i) {
        for (int j = 0; j < N; ++ j, ++ ctr) {
            a[i][j] = data[ctr];
        }
    } // The final value of ctr would be L, since L = M * N.
    

    这里,我们使用ij作为二维索引,并从0开始ctr,然后在逐步遍历一维数组时增加它。这种方法还有另一种变体,即显式计算源索引,而不是使用增量,例如:

    for (int i = 0; i < M; ++ i) {
        for (int j = 0; j < N; ++ j) {
            int ctr = i * N + j;
            a[i][j] = data[ctr];
        }
    }
    

    第二种方法是迭代一维数组,并计算二维数组中的目标位置。模和整数除法有助于:

    for (int ctr = 0; ctr < L; ++ ctr) {
        int i = ctr / N;
        int j = ctr % N;
        a[i][j] = data[ctr];
    }
    

    所有这些方法都有效。根据你的情况,有些可能比其他更方便。请注意,如果必须同时进行其他变换,则这两种显式计算的方法可能更方便,例如,上面的最后一种方法将使水平翻转二维矩阵变得非常容易