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
在这里,我们使用i和j作为二维索引,从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;
}
}
}
}
}