【问题标题】:Why is the 2nd row of my 2d array taking random values from RAM?为什么我的二维数组的第二行从 RAM 中获取随机值?
【发布时间】:2018-09-19 12:59:23
【问题描述】:

所以我正在为这个类项目工作,我正在尝试使用 for 循环将值分配给二维数组,但我遇到了几个问题。这是我的代码:

#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

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

【问题讨论】:

  • 尝试更改 matrix1[i][j] = i + 5; -> matrix1[i][0] = i + 5; j 永远不会被重置,第二次循环 i 循环 j 将在上述分配发生时为 MAX
  • 在开头的i循环内移动j = 0

标签: c++ arrays multidimensional-array


【解决方案1】:

j0 仅适用于第一个“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;
}

【讨论】:

    【解决方案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;

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-23
        • 1970-01-01
        • 1970-01-01
        • 2018-11-11
        • 2021-11-28
        相关资源
        最近更新 更多