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

时间:2018-09-19 12:59:24

标签: c++ arrays multidimensional-array

因此,我正在为该项目从事课堂学习,并且尝试使用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

我要问是否有人可以修复第二行,以及为什么第一列无法打印

3 个答案:

答案 0 :(得分:4)

j仅在第一个“ 0迭代”中为i;在其他所有情况下均为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;
}

答案 1 :(得分:2)

问题在于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;
}

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

答案 2 :(得分:0)

您对j的重置应在循环内。在第二轮(i = 1)中,j从MAX开始。

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