我无法解决的二维数组任务
Two-dimensional array task that I can't solve
最近我开始学习二维数组,最近我遇到了这些任务,这些任务为您提供 10 x 10 数组的图像,您必须重新创建它。我完成了一些任务,但其中一项任务给了我一个问题。好像我真的很亲近,但同时又不是。我已经尝试了一段时间,但我无法得到所需的答案。
public static void main(String[] args) {
int A[][] = new int [10][10];
for (int i = 0; i <= 9; i++) {
for (int j=9-i, n=1; j>=1; j--) {
if (j <= 9) {
A[i][j] = n++;
}
}
}
for (int i=0; i<10; i++) {
for (int j=0; j<10; j++) {
System.out.print(A[i][j]+"\t");
}
System.out.println();
}
}
}
感谢您的帮助!
所需的图案与主对角线对称,即对于一对 od 索引 i
和 j
这些单元格应具有相同的内容:a[i][j] = a[j][i]
.
接下来,主对角线上的元素9、7、5、3、1在迭代时起始数减2,嵌套循环的“宽度”从两边递减。
因此生成的代码可能如下所示:
int A[][] = new int [10][10];
for (int i = 0; i < 10 / 2; i++) {
for (int j = i; j < 10 - i; j++) {
A[i][j] = A[j][i] = 9 - i - j;
}
}
输出:
9 8 7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0 0
7 6 5 4 3 2 1 0 0 0
6 5 4 3 2 1 0 0 0 0
5 4 3 2 1 0 0 0 0 0
4 3 2 1 0 0 0 0 0 0
3 2 1 0 0 0 0 0 0 0
2 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
这是另一个版本。它从下往上填充数组。
- 首先,从 9 循环到 0
- 简单循环开始填充数组,方法是调整起点
k
,每次循环迭代将其减少 i
。
int A[][] = new A[10][10];
for (int i = 9; i >= 0; i--) {
for (int k = 9-i,z = 0; k > 0; k--) {
A[i][z++] = k;
}
}
for (int[] arr : A) {
System.out.println(Arrays.toString(arr));
}
版画
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[8, 7, 6, 5, 4, 3, 2, 1, 0, 0]
[7, 6, 5, 4, 3, 2, 1, 0, 0, 0]
[6, 5, 4, 3, 2, 1, 0, 0, 0, 0]
[5, 4, 3, 2, 1, 0, 0, 0, 0, 0]
[4, 3, 2, 1, 0, 0, 0, 0, 0, 0]
[3, 2, 1, 0, 0, 0, 0, 0, 0, 0]
[2, 1, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
最近我开始学习二维数组,最近我遇到了这些任务,这些任务为您提供 10 x 10 数组的图像,您必须重新创建它。我完成了一些任务,但其中一项任务给了我一个问题。好像我真的很亲近,但同时又不是。我已经尝试了一段时间,但我无法得到所需的答案。
public static void main(String[] args) {
int A[][] = new int [10][10];
for (int i = 0; i <= 9; i++) {
for (int j=9-i, n=1; j>=1; j--) {
if (j <= 9) {
A[i][j] = n++;
}
}
}
for (int i=0; i<10; i++) {
for (int j=0; j<10; j++) {
System.out.print(A[i][j]+"\t");
}
System.out.println();
}
}
}
感谢您的帮助!
所需的图案与主对角线对称,即对于一对 od 索引 i
和 j
这些单元格应具有相同的内容:a[i][j] = a[j][i]
.
接下来,主对角线上的元素9、7、5、3、1在迭代时起始数减2,嵌套循环的“宽度”从两边递减。
因此生成的代码可能如下所示:
int A[][] = new int [10][10];
for (int i = 0; i < 10 / 2; i++) {
for (int j = i; j < 10 - i; j++) {
A[i][j] = A[j][i] = 9 - i - j;
}
}
输出:
9 8 7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0 0
7 6 5 4 3 2 1 0 0 0
6 5 4 3 2 1 0 0 0 0
5 4 3 2 1 0 0 0 0 0
4 3 2 1 0 0 0 0 0 0
3 2 1 0 0 0 0 0 0 0
2 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
这是另一个版本。它从下往上填充数组。
- 首先,从 9 循环到 0
- 简单循环开始填充数组,方法是调整起点
k
,每次循环迭代将其减少i
。
int A[][] = new A[10][10];
for (int i = 9; i >= 0; i--) {
for (int k = 9-i,z = 0; k > 0; k--) {
A[i][z++] = k;
}
}
for (int[] arr : A) {
System.out.println(Arrays.toString(arr));
}
版画
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[8, 7, 6, 5, 4, 3, 2, 1, 0, 0]
[7, 6, 5, 4, 3, 2, 1, 0, 0, 0]
[6, 5, 4, 3, 2, 1, 0, 0, 0, 0]
[5, 4, 3, 2, 1, 0, 0, 0, 0, 0]
[4, 3, 2, 1, 0, 0, 0, 0, 0, 0]
[3, 2, 1, 0, 0, 0, 0, 0, 0, 0]
[2, 1, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]