Почему вторая строка моего 2d массива с случайными значениями из памяти?

голоса
1

поэтому я работаю над этим проектом класса, и я пытаюсь присвоить значения 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

Я прошу, если кто-то, что я могу сделать, чтобы исправить второй ряд, а также, почему первый столбец не печатает

Задан 19/09/2018 в 12:59
источник пользователем
На других языках...                            


3 ответов

голоса
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;
}
Ответил 19/09/2018 d 13:09
источник пользователем

голоса
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;
}

или изменить , matrix1[i][j] = i + 5;чтобы , matrix1[i][0] = i + 5;как предложил Ричард Critten

Ответил 19/09/2018 d 13:05
источник пользователем

голоса
0

Ваш сброс J должен быть внутри цикла. Во втором раунде (I = 1), J начинается как MAX.

for (i=0; i < MAX; i++){
  j=0;
Ответил 19/09/2018 d 13:06
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more