|
Java-podział tablicy 2D
shagrin - 22-04-2010 21:09
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.
tremor - 23-04-2010 01:00
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ę int[][] tablica = { {1, 2, 3, 4, 5, 6}, {3, 4, 3, 5,}, {8, 9, 0, 2, 9, 8, 1}};
a chciałabyś 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: 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).
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|