ďťż
 
 
   Java-podział tablicy 2D
 
 

Tematy

 
    
 

 

 

 

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis