Wpis z mikrobloga

Uczę się od klilku dni Java od podstaw. Wczoraj trafiłem na zbiory (arrays) i mam problem z jednym przykładem - nie mam się kogo zapytać a kurs robię z tej strony https://www.w3schools.com/java

Czy możecie mi powiedzieć dlaczego w tej linijce kodu: for(int j = 0; j < cars[i].length; ++j) jest "i" w nawiasach kwadratowych przy cars.length, i dlaczego w ogóle "i"?
Kod wygląda tak chcę otrzymać wszystkie liczby znajdujące się w obu zbiorach zbioru "cars"

public class Main {
public static void main(String[] args) {
int[][] cars = { {1, 2, 3, 4}, {5, 6, 7} };
for (int i = 0; i < cars.length; ++i) {
for(int j = 0; j < cars[i].length; ++j) {
System.out.println(cars[i][j]);
}
}
}
}

Dwoję się i troję ale w kursie nie jest wytłumaczone dlaczego a nie mam kogo zapytać. Próbowałem wielu sposobów coś zmieniać, podstawiać i nie mogę do tego sam dojść.
Będę wdzięczny nawet za wskazówkę.

#java #programowanie
  • 18
  • Odpowiedz
zbiory (arrays)


@coffemaker: Tablice

i w tym miejscu to obecny stan licznika pętli for, składnia tablic w Javie (i nie tylko) pozwala dostać się do elementu tablicy pod indeksem n poprzez nawias kwadratowy (np. tablica[5] oznacza szósty element w tablicy - indeksowane od zera). W tym miejscu oznacza to, że jeśli licznik pętli pod i wynosi 2, to sprawdzamy trzeci element tablicy, jeśli 3, to czwarty etc., po kolei
  • Odpowiedz
Bo to jest tablica tablic. Masz tablicę cars (bardziej by pasowało numberMatrix, staraj się nazywać zmienne tak, jakie jest ich przeznaczenie) i ona zawiera w sobie dwie tablice. cars.length powinno pokazać 2, bo są w niej dwie tablice. cars[i].length powinno pokazać kolejno 4 i 3, bo to są długości kolejnych tablic.
  • Odpowiedz
via Wykop Mobilny (Android)
  • 1
@coffemaker: bo jedziesz po kolekcji w kolekcji. To "i" jest od słowa index bodajże. Znaczy to tyle, że w zewnętrznej pętli wybierasz podzbiór ze zbioru car i przez cars.length sprawdzasz ile jest podzbiorów, a w wewnętrznej sprawdzasz przez cara[i] ile jest elementów w podzbiorze. "i" dlatego, że w zewnętrznej pętli jesteś obecnie na danym podzbiorze. W następnym przejściu pętli ta liczba i się zwiększy, więc będziesz operował na kolejnym podzbiorze. Jak
  • Odpowiedz
@coffemaker: tablica cars na każdej pozycji zawiera tablicę intów.

Pierwsza pętla - korzystająca ze zmiennej "i" iteruje sobie po tablicach.
Druga pętla - korzystająca ze zmiennej "j" dla każdej takiej tablicy iteruje po jej elementach.

Porównując do czegoś bardziej namacalnego - masz szafkę z książkami, która ma kilka półek.
Pierwsze iterowanie jest: "dla każdej półki", drugie: "dla każdej książki na wybranej półce".

Finalnie masz: dla każdej półki, dla każdej książki na
  • Odpowiedz
@coffemaker Pierwsza pętla iteruje po elementach wewnątrz cars, czyli masz tutaj dwie tablice, cars[0] oraz cars[1]. Pole length jest polem tablicy, stąd możemy użyć cars[0].length lub cars[1].length. Pobierasz konkretną tablicę, z której pobierasz elementy tej tablicy za pomocą cars[0][0], cars[0][1], etc.
  • Odpowiedz
@smiech2: @Paczek_w_masle: @Czesiowcy: @Myndel: @sepuqqu: @OstatniSamuraj: a jeszcze pójdę za ciosem i zapytam o coś jeszcze skoro siedzicie przy kawce :) czy możecie mi polecić jakiś kurs (nawet płatny, na udemy? czy może YouTube obojętne coś dobrego fajnie wytłumaczone) albo książkę? Mam masę wolnego czasu i staram się go jakoś spożytkować w pełni. Trafiłem przypadkiem na ten kurs o którym wspomniałem we wpisie ale jest w
  • Odpowiedz
@coffemaker: To ja polecę coś innego - może nie na teraz, ale na chwilę później:
Advent of Code - takie świąteczne wyzwania programistyczne
Możesz sobie wybrać dowolny rok:
https://adventofcode.com/2015

Fakt, że po angielsku, ale uczy nie tyle programowania, co myślenia programistycznego i algorytmicznego. To taki odpowiednik matematycznych zadań z treścią. Stopień trudności rośnie z kolejnymi zadaniami i fakt, niektóre są ciężkie.
Ale tym większa satysfakcja jak się je uda rozwiązać.

I
  • Odpowiedz