我正在做一个任务,我需要有两个1d的数组,将它们发送到另一个方法,然后制作一个2d的数组。然后我必须将数组传回主方法(所有这些我都已完成)。现在我必须通过使用for循环的方式打印出这个2d数组,使偶数行或列中的所有元素为0,而奇数行或列中的所有元素为1。我的代码打印的都是0。我的代码和输出如下。
numRows
和 numColumns
是我用来制作的数组。oddEven
.
for(int j = 0; j < numColumns.length; j++)
{
for(int i = 0; i < numRows.length; i++)
{
for(int a = 0; a < numColumns.length; a++) //tests for even number column
{
if(a % 2 == 0)
{
oddEven[j][i] = 0;
}else {
oddEven[j][i] = 1;
}
}
for(int b = 0; b < numRows.length; b++) //tests for even number row
{
if( b % 2 == 0)
{
oddEven[j][i] = 0;
}else {
oddEven[j][i] = 1;
}
}
System.out.print(oddEven[j][i] + " ");
}
System.out.println();
}
/*
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
*/
我知道如何打印出一个二维数组,但我不知道如何做我刚才所说的事情。
下面是输出的结果。
0 0 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 0 1 0
写 oddEven[j][i] = (i%2)*(j%2)
在现有的循环中,你不必要地遍历两个索引,这导致每个值都被设置为零,因为你正在使用 最后值.
你只需要最外层的两个循环。你可以这样简化你的代码。
for(int j = 0; j < numColumns.length; j++)
{
for(int i = 0; i < numRows.length; i++)
{
oddEven[j][i] = (j%2!=0&&i%2!=0)?1:0;
System.out.print(oddEven[j][i] + " ");
}
System.out.println();
}
为了进一步解释,你的 a
循环是没有意义的,因为下面的 b
循环设置相同的值。循环的 oddEven[j][i]
对于任何 j
和 i
的范围内,将根据 numRows.length - 1
中的最后一个值,因为这将是你的 b
for循环。
使用一个 if
代替三元运算符
for(int j = 0; j < numColumns.length; j++)
{
for(int i = 0; i < numRows.length; i++)
{
if(j%2!=0&&i%2!=0){
oddEven[j][i]=1;
}
else{
oddEven[j][i]=0;
}
System.out.print(oddEven[j][i] + " ");
}
System.out.println();
}