Hvorfor er den andre raden av min 2d rekke å ta tilfeldige verdier fra RAM?

stemmer
1

så jeg jobber med dette prosjektet for klassen, og jeg prøver å tilordne verdier til en 2d array ved hjelp av en for loop, men jeg har kjørt inn i et par problemer. Her er min kode:

#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;
    }




}

Og dette er hva det utganger:

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   

og dette er resultatet jeg prøver å få:

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

Jeg spør om noen hva jeg kan gjøre for å fikse den andre rad, og også hvorfor den første kolonnen er ikke utskrift

Publisert på 19/09/2018 klokken 12:59
kilden bruker
På andre språk...                            


3 svar

stemmer
4

jer 0bare for den første " igjentagelse"; i alle andre tilfeller er det MAX.
I de tilfeller hvor det er MAX, matrix[i][j]har udefinert atferd.

Den robuste løsningen er å bruke sløyfe variabler for looping og ingenting annet.
Erklærer alt i så lite omfang som mulig.

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;
}
Svarte 19/09/2018 kl. 13:09
kilden bruker

stemmer
2

Problemet er at jdet ikke er tilbakestilt i tid, slik at linjen matrix1[i][j] = i + 5;j er forbi enden av rekken. Flytt sette jtil null frem en linje

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;
}

eller endre matrix1[i][j] = i + 5;til matrix1[i][0] = i + 5;som Richard Critten foreslått

Svarte 19/09/2018 kl. 13:05
kilden bruker

stemmer
0

Din reset av j skal være inne i loop. I den andre runden (i = 1), begynner j som MAX.

for (i=0; i < MAX; i++){
  j=0;
Svarte 19/09/2018 kl. 13:06
kilden bruker

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