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

Java 将一维数组的内容传输到二维数组,java,arrays,Java,Arrays,我正在尝试制作一个加密程序,用户输入一条消息,然后将“字母转换成数字” 例如,用户输入一个ABCD作为其消息。转换后的数字将是1234,数字存储在一维整数数组中。我想做的是使用二维数组将其放入2x2矩阵中 以下是我的代码片段: int data[] = new int[] {10,20,30,40}; *for(i=0;i<2;i++) { for(j=0;j<2;j++) {

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

例如,用户输入一个
ABCD
作为其消息。转换后的数字将是
1234
,数字存储在一维整数数组中。我想做的是使用二维数组将其放入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

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

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];
    }
}
int data[]=newint[]{10,20,30,40,50,60};
整数宽度=3;
整数高度=2;
int[][]结果=新的int[高度][宽度];
对于(int i=0;i
似乎您希望输出一个2xn矩阵,同时仍将值存储在一维数组中。如果是这种情况,您可以:

假设值集的基数
m
已知。然后,由于您希望它是2行,因此计算
n=ceil(m/2)
,这将是2xn矩阵的列计数。请注意,如果
m
为奇数,则第二行中只有
n-1

然后,对于存储值的数组
数据
(一维数组),只需执行以下操作

   for(i=0;i<2;i++)    // For each row
   {
       for(j=0;j<n;j++)    // For each column, 
                           // where index is baseline+j in the original one-dim array
       {
           System.out.print(data[i*n+j]);
       }
   }
for(i=0;i您的代码很接近,但并不完全正确。具体而言,您最内部的循环(具有ctr的循环)没有完成多少工作:它实际上只是重复设置当前的
a[i][j]
到一维数组中的每个值,最终以每个单元格中数组中的最后一个值结束。您的主要问题是如何将ctr工作到这些循环中

这里有两种常用方法。我所做的一般假设是将长度为L的数组打包成MxN2-D数组,其中M x N=L

第一种方法是迭代二维数组,从一维数组中提取适当的值

for(int i=0,ctr=0;i
在这里,我们使用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 i=0;i
第二种方法是迭代一维数组,并计算二维数组中的目标位置。模和整数除法可以帮助:

for (int ctr = 0; ctr < L; ++ ctr) {
    int i = ctr / N;
    int j = ctr % N;
    a[i][j] = data[ctr];
}
for(int-ctr=0;ctr
所有这些方法都有效。根据您的情况,某些方法可能比其他方法更方便。请注意,如果您必须同时进行其他转换,则这两种显式计算的方法可能更方便,例如,上面的最后一种方法将使您很容易水平翻转二维矩阵。

检查此项它适用于任何长度的数据
check this solution, it works for any length of data

public class ArrayTest 
    {
        public static void main(String[] args) 
        {
            int data[] = new int[] {10,20,30,40,50};
            int length,limit1,limit2;
            length=data.length;
            if(length%2==0)
            {
                limit1=data.length/2;
                limit2=2;
            }
            else
            {
                limit1=data.length/2+1;
                limit2=2;
            }

            int data2[][] = new int[limit1][limit2];

            int ctr=0;

            //stores data in 2d array
             for(int i=0;i<limit1;i++)
             {
                 for(int j=0;j<limit2;j++)
                 {
                     if(ctr<length)
                     {
                         data2[i][j] = data[ctr];
                         ctr++;
                     }
                     else
                     {
                         break;
                     }
                 }
             }

             ctr=0;
             //prints data from 2d array
             for(int i=0;i<limit1;i++)
             {
                 for(int j=0;j<limit2;j++)
                 {
                     if(ctr<length)
                     {
                         System.out.println(data2[i][j]);
                         ctr++;
                     }
                     else
                     {
                         break;
                     }
                 }
             }
        }

    }
公共类阵列测试 { 公共静态void main(字符串[]args) { int data[]=新int[]{10,20,30,40,50}; 整数长度,limit1,limit2; 长度=data.length; 如果(长度%2==0) { limit1=data.length/2; limit2=2; } 其他的 { limit1=数据长度/2+1; limit2=2; } int data2[][]=新的int[limit1][limit2]; int ctr=0; //以二维数组存储数据
对于(int i=0;用户始终输入4个字母?如果用户输入
ABCDE
,该怎么办?在这种情况下,代码共享将不起作用。Christine,目标数组是否始终为2x2,或者可能更大?假定您希望能够有任何
宽度
和任何
高度
,前提是在初始数组。对吗?@Batshray不,不总是4。它可以是输入想要的长度。@DavidWallace是的,你是对的。你能帮我吗?我迷路了!
for (int ctr = 0; ctr < L; ++ ctr) {
    int i = ctr / N;
    int j = ctr % N;
    a[i][j] = data[ctr];
}
check this solution, it works for any length of data

public class ArrayTest 
    {
        public static void main(String[] args) 
        {
            int data[] = new int[] {10,20,30,40,50};
            int length,limit1,limit2;
            length=data.length;
            if(length%2==0)
            {
                limit1=data.length/2;
                limit2=2;
            }
            else
            {
                limit1=data.length/2+1;
                limit2=2;
            }

            int data2[][] = new int[limit1][limit2];

            int ctr=0;

            //stores data in 2d array
             for(int i=0;i<limit1;i++)
             {
                 for(int j=0;j<limit2;j++)
                 {
                     if(ctr<length)
                     {
                         data2[i][j] = data[ctr];
                         ctr++;
                     }
                     else
                     {
                         break;
                     }
                 }
             }

             ctr=0;
             //prints data from 2d array
             for(int i=0;i<limit1;i++)
             {
                 for(int j=0;j<limit2;j++)
                 {
                     if(ctr<length)
                     {
                         System.out.println(data2[i][j]);
                         ctr++;
                     }
                     else
                     {
                         break;
                     }
                 }
             }
        }

    }