Programowanie średniozaawansowane #12: 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.

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:

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.

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

Dodaj komentarz