Java #29: tablice wielowymiarowe

Zanim przejdę do długo wyczekiwanych kolekcji*, należałoby rozszerzyć odrobinę Twoją wiedzę o tablicach. Znasz już ich podstawy. Wiesz, że można trzymać w nich zarówno typy proste (int, float, itp.) jak i referencyjne (np. obiekty klas). Skoro można trzymać tam typy referencyjne, a tablica jest też typem referencyjnym, to znaczy, że możesz trzymać też tablicę w tablicy. W takim właśnie sposób w Javie są zaimplementowane tablice wielowymiarowe – jako tablice tablic.

Tablice wielowymiarowe – przykładowa implementacja

Spróbuj zaimplementować korzystając z tej funkcji języka Java trójkąt Pascala**.

public class MultiArray {

  public static void main(String[] args) {
    int level = 10;
    int[][] pascal = pascalTriangle(level);
    
    System.out.println(Arrays.deepToString(pascal));
  }

  private static int[][] pascalTriangle(int level) {
    int [][] pascal = new int [level][];
    for (int i = 0; i < pascal.length; i++) {
      pascal[i] = new int[i+1];
      pascal[i][0] = 1;
      pascal[i][i]= 1;
      for (int j = 1; j < i; j++) {
        pascal[i][j] = pascal[i - 1][j - 1] + pascal[i-1][j];
      }
    }
    return pascal;
  }

}

Jedna z najprostszych implementacji będzie wyglądać tak, jak powyżej.

Wpierw deklarujesz tablice dwuwymiarową (int [][] pascal = new int [level][];). Tablica dwuwymiarowa to inaczej macierz***, którą możesz sobie zilustrować, tak jak na obrazku poniżej:

tablice wielowymiarowe

W przypadku jednak trójkąta Pascala wygląda to trochę inaczej, bo nasza dwuwymiarowa tablica przypomina bardziej piramidę, której wierzchołek jest równy jeden (pascal[i][0] = 1;). Następnie w kolejnych wierszach, aż do momentu osiągnięcia odpowiedniego poziomu trójkąta (zmienna level), liczba elementów macierzy rośnie (najpierw jest jeden, później dwa, następnie trzy, itp.) . Wyliczana jest konkretna wartość każdej komórki zgodnie z algorytmem trójkąta Pascala. Na samym końcu można sprawdzić rezultat wyświetlając całą macierz za pomocą klasy pomocniczej Arrays i metody deepToString.

Tablice wielowymiarowe – podsumowanie

To proste ćwiczenie ma na celu pokazać Ci, że tablice nie muszą operować na jednym wymiarze, ale wielu więcej, jeśli zajdzie tylko taka potrzeba.

*Niestety poznasz je dopiero teraz, bo uważam, że nie było sensu je wprowadzać bez znajomości interfejsów i polimorfizmu.

**https://pl.wikipedia.org/wiki/Trójkąt_Pascala

***http://www.math.edu.pl/macierze

Link do lekcji: https://github.com/developeronthego/java-middle/tree/master/src/main/java/middle/lesson12

Stay in the Loop

Get the daily email from CryptoNews that makes reading the news actually enjoyable. Join our mailing list to stay in the loop to stay informed, for free.

Ostatnio dodane

- Advertisement - spot_img

Powiązane wpisy