Strona 1 z 1

Java-podział tablicy 2D

: 22 kwietnia 2010, 21:09
autor: shagrin
Witam
Może mi ktoś poradzić, jak najłatwiej i najefektywniej podzielić dwuwymiarową tablice int[][], na mniejsze, również typu int[][], oraz jak to wszystko przechować? W sensie żebym w efekcie otrzymała jedną tablicę z tymi małymi tablicami(tablice w tablicy). Najlepiej byłoby, gdyby wynikowa tablica była również dwuwymiarowa.

: 23 kwietnia 2010, 01:00
autor: tremor
Na wstępie przestrzegam przed używaniem wielowymiarowych tablic - daje to kod nieczytelny, trudny w utrzymaniu, łatwo też o błąd.
Nie jestem pewien, że dobrze zrozumiałem. Przykładowo masz tablicę

Kod: Zaznacz cały

int[][] tablica = { {1, 2, 3, 4, 5, 6}, {3, 4, 3, 5,}, {8, 9, 0, 2, 9, 8, 1}};
a chciałabyś

Kod: Zaznacz cały

int[][] tablica2 = { {1, 2, 3} {4, 5, 6}, {3, 4}, {3, 5}, {8, 9, 0, 2}, {9, 8, 1}};
czyli z grubsza siekamy każdą w wewnętrznych tablic na pół.

Spróbowałbym tak:

Kod: Zaznacz cały

int[][] tablica2 = new int[tablica.length * 2][];
for (int i = 0; i < tablica.length; i++) {
   int polDlugosci = tablica[i].length / 2;
   int resztaZParzystosci = (polDlugosci % 2);
   int[] tabWewn2a = new int[polDlugosci  + resztaZParzystosci];
   // tu moglem pomylic kolejnosc parametrow, ale chyba wiadomo o co biega
   System.arrayCopy(tablica[i], 0, tabWewn2a, 0, tabWewn2a.length);
   tablica2[2 * i] = tabWewn2a;
  
   int[] tabWewn2b = new int[polDlugosci];
   System.arrayCopy(tablica[i], tabWewn2a.length, tabWewn2b, 0, tabWewn2b.length);
   tablica2[2 * i + 1] = tabWewn2b;
}
Kod się może nie kompilować, bo pisany z głowy, ale mam nadzieję, że idea jest jasna. Przy odrobinie wysiłku można zrobić, aby ilość nowych tablic była parametryzowana - kod tworzący tabWewn2a i tabWewn2b jest bardzo podobny. Można go wyodrębnić do metody i wykonywać w pętli. Inny wariant mógłby dzielić na tablice o zadanej długości (np. po 3 elementy).