为什么我的 2d 数组的第二行从 RAM 中获取随机值?

Why is the 2nd row of my 2d array taking random values from RAM?

本文关键字:RAM 二行 获取 随机 数组 2d 我的 为什么      更新时间:2023-10-16

所以我正在为类做这个项目,我正在尝试使用 for 循环为 2d 数组赋值,但我遇到了几个问题。这是我的代码:

#include <iostream>
#include <string>
using namespace std;
const int MAX = 10;
int main()
{
int matrix2[MAX][MAX];
int matrix1[MAX][MAX];

int i, j;
j=0;
for (i=0; i < MAX; i++){
matrix1[i][j] = i + 5;
for (j=1; j < MAX; j++){
matrix1[i][j] = matrix1[i][j-1] + 4;
cout << matrix1[i][j] << " ";
}
cout << endl;
}


}

这就是它输出的内容:

9 13 17 21 25 29 33 37 41 
1422620036 1422620040 1422620044 1422620048 1422620052 1422620056 1422620060 1422620064 1422620068 
10 14 18 22 26 30 34 38 42 
11 15 19 23 27 31 35 39 43 
12 16 20 24 28 32 36 40 44 
13 17 21 25 29 33 37 41 45 
14 18 22 26 30 34 38 42 46 
15 19 23 27 31 35 39 43 47 
16 20 24 28 32 36 40 44 48 
17 21 25 29 33 37 41 45 49   

这是我试图获得的输出:

5   9   13  17  21  25  29  33  37  41  
6   10  14  18  22  26  30  34  38  42  
7   11  15  19  23  27  31  35  39  43  
8   12  16  20  24  28  32  36  40  44  
9   13  17  21  25  29  33  37  41  45  
10  14  18  22  26  30  34  38  42  46  
11  15  19  23  27  31  35  39  43  47  
12  16  20  24  28  32  36  40  44  48  
13  17  21  25  29  33  37  41  45  49  
14  18  22  26  30  34  38  42  46  50

我问是否有人我可以做些什么来修复第二行,以及为什么第一列没有打印

j只对第一次"i迭代"0;在所有其他情况下,它是MAX
MAX的情况下,matrix[i][j]有未定义的行为。

强大的解决方案是使用循环变量进行循环,而不是其他任何内容。
在尽可能小的范围内声明所有内容。

for (int i = 0; i < MAX; i++){
matrix1[i][0] = i + 5;
for (int j = 1; j < MAX; j++){
matrix1[i][j] = matrix1[i][j-1] + 4;
cout << matrix1[i][j] << " ";
}
cout << endl;
}

问题是j没有及时重置,所以在matrix1[i][j] = i + 5;j 的行已经过了数组的末尾。将设置j移至零向前移动一行

for (i=0; i < MAX; i++){
j = 0;
matrix1[i][j] = i + 5;
for (j=1; j < MAX; j++){
matrix1[i][j] = matrix1[i][j-1] + 4;
cout << matrix1[i][j] << " ";
}
cout << endl;
}

或按照理查德·克里滕的建议将matrix1[i][j] = i + 5;更改为matrix1[i][0] = i + 5;

你对 j 的重置应该在循环内。在第二轮 (i=1( 中,j 以 MAX 开始。

for (i=0; i < MAX; i++){
j=0;