我正在尝试制作一种方法,其中在main中创建2D数组,可以是任何维度。之后,我们应该创建 2 个方法,一个将数组中的每个下一个值递增一个标记为 step 的给定数字。一种方法应该递增行,另一种方法按列递增。
这是我所拥有的:
public static void main (String [] args){
int [][] fillRightArray = new int [5][8];
fillRight(fillRightArray, 2);
int [][] fillDownArray = new int[5][8];
fillDown(fillDownArray, -2);
对于填充右方法,这是输出应该是什么:
2 4 6 8 10 12 14 16
18 20 22 24... //all the way to 80, since the array has 40 elements (40*2=80)
这是我的方法:
public static void fillRight (int [][] fillRightArray, int step){
for (int i = 0; i< fillRightArray.length; i++){
for (int j = 0; j< fillRightArray[i].length; j++){
fillRightArray[i][j] += step*(j+1);
System.out.print(fillRightArray[i][j] + " ");
}
System.out.print("n");
}
但出于某种原因,我的输出是:
2 4 6 8 10 12 14 16
2 4 6 8 10 12 14 16
2 4 6 8 10 12 14 16
2 4 6 8 10 12 14 16
2 4 6 8 10 12 14 16
知道为什么会这样吗?当我使用 fillDown 方法时也会发生同样的事情,输出应该是:
2 12 22....
4 14 24....
6 16 26....
8 18 28....
10 20 30.... all the way to 80
但相反,我得到:
2 2 2 2 2
4 4 4 4 4
6 6 6 6 6
8 8 8 8 8
10 10 10 10 10
您的代码不起作用,因为您没有考虑上一个单元格。
用于确定特定单元格值的逻辑fillRightArray[i][j] += step*(j+1);
。
此行仅考虑 j 的值来确定数组中单元格的值,而它还应该考虑 i 的值(显式或隐式)。
您应该添加一个计数器来跟踪已设置的单元格数,并根据已设置的单元格数设置下一个单元格值。
您的 fillRight 方法应如下所示:
public static void fillRight (int [][] fillRightArray, int step){
int count = 0;
for (int i = 0; i< fillRightArray.length; i++){
for (int j = 0; j< fillRightArray[i].length; j++){
count++;
fillRightArray[i][j] += step*count;
System.out.print(fillRightArray[i][j] + " ");
}
System.out.print("n");
}
}
你不断地重复相同的工作,每次都回到0。
在你的 fillRight 中,每一行都在执行 2,4,6,8,10,因为你正在执行 step*(j+1),其中 j 在循环的每次迭代后重置为 0。您需要找到一种方法在设置值时包含 i 和 j,或者只是有一个每一步递增的计数变量
喜欢这个:
step += 2
fillRightArray[i][j] = step
这样你就不用担心位置问题了。