• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Javascript tablica dwuwymiarowa - tworzenie za pomocą pętli

+2 głosów
68 wizyt
pytanie zadane 29 marca w JavaScript przez kolusnk Początkujący (290 p.)

Witam, chciałbym stworzyć i wyświetlić w konsoli tablicę wielowymiarową zawierającą 3 wiersze i 3 kolumny :

[ '1 x 1 = 1 | ', '1 x 2 = 2 | ', '1 x 1 = 3 | ' ],
[ '2 x 1 = 2 | ', '2 x 2 = 4 | ', '2 x 3 = 6 | ' ],
[ '3 x 1 = 3 | ', '3 x 2 = 6 | ', '3 x 3 = 9 | ' ]

Zadanie muszę wykonać używając pętli for, więc mój napisałem kod w ten sposób:

const n = 3;
const calc = [];

let liczba = "1";

for (let i = 0; i < n; i++) {
    calc[i] = [];
}
for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
        calc[i][j] = liczba + ' x ' + liczba + ' = ' + liczba + " | ";
    }
}

console.log(calc);

Niestety wynik mojego kodu jest inny niż zamierzony i wygląda tak: 

[ '1 x 1 = 1 | ', '1 x 1 = 1 | ', '1 x 1 = 1 | ' ],
[ '1 x 1 = 1 | ', '1 x 1 = 1 | ', '1 x 1 = 1 | ' ],
[ '1 x 1 = 1 | ', '1 x 1 = 1 | ', '1 x 1 = 1 | ' ]

Co powinienem zmienić żeby uzyskać pożądany efekt, nie wiem gdzie robię błąd i już się trochę w tym pogubiłem. Będę wdzięczny za wskazówki.

1 odpowiedź

+2 głosów
odpowiedź 29 marca przez ScriptyChris Mędrzec (180,980 p.)
wybrane 29 marca przez kolusnk
 
Najlepsza

Skup się na tej linii:

calc[i][j] = liczba + ' x ' + liczba + ' = ' + liczba + " | ";

Wypisujesz w niej zmienną liczba, której wartości nigdzie nie zmieniasz - stąd wynikowo wszędzie jest 1. Potrzebujesz natomiast podstawić w jej miejsca kolejno:

  1. zmienną reprezentującą licznik (iterator) pętli zewnętrznej,
  2. zmienną reprezentującą licznik pętli wewnętrznej,
  3. iloczyn wartości tych liczników.

Weź też pod uwagę, że liczniki w Twoich pętlach zaczynają się od 0. Potrzebujesz więc odpowiednio "kompensować" ich wartości przy podstawianiu i liczeniu iloczynu.

1
komentarz 29 marca przez kolusnk Początkujący (290 p.)
calc[i][j] = (i + 1) + " x " + (j + 1) + " = " + (i + 1) * (j + 1);

Dziękuję, bardzo fajnie wytłumaczyłeś. Posłuchałem Twoich instrukcji i pomogło. Metodą prób i błędów udało mi się chyba zrozumieć zasadę działania. 

1
komentarz 29 marca przez ScriptyChris Mędrzec (180,980 p.)

Żeby kod był łatwiejszy w zrozumieniu, możesz czytelniej nazwać zmienne i skorzystać z template literal, zamiast kleić string operatorem plusa, np.:

const n = 3;
const calc = [];
 
let liczba = "1";
 
for (let i = 0; i < n; i++) {
    calc[i] = [];
}

for (let i = 0; i < n; i++) {
    const leftMultiplicative = i + 1;

    for (let j = 0; j < n; j++) {
        const rightMultiplicative = j + 1;
        const multipliedValue = leftMultiplicative * rightMultiplicative;

        calc[i][j] = `${leftMultiplicative} x ${rightMultiplicative} = ${multipliedValue} | `;
    }
}
 
console.log(calc);

 

1
komentarz 30 marca przez VBService Mędrzec (171,990 p.)
edycja 30 marca przez VBService

wink

const n = 3;
const calc = Array(n).fill().map(_ => Array(n).fill());
  
for (let i=1; i<=n; i++)
    for (let j=1; j<=n; j++) 
        calc[(i-1)][(j-1)] = `${i} x ${j} = ${(i * j)} | `;
   
console.log(calc);

lub

const n = 3;
const calc = Array(n).fill().map(_ => Array(n).fill());
 
for (let i=1, r=0; r<n; i++, r++)
    for (let j=1, c=0; c<n; j++, c++) 
        calc[r][c] = `${i} x ${j} = ${(i * j)} | `;
  
console.log(calc);

 

Podobne pytania

0 głosów
2 odpowiedzi 835 wizyt
0 głosów
1 odpowiedź 260 wizyt
pytanie zadane 3 maja 2018 w JavaScript przez Jake Obywatel (1,820 p.)
0 głosów
0 odpowiedzi 194 wizyt

88,331 zapytań

136,925 odpowiedzi

305,594 komentarzy

58,601 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...