Szarpana tablica dwuwymiarowa - pętla

Szarpana tablica dwuwymiarowa - pętla
S4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Cześć! Mam następującą dwuwymiarową szarpaną tablicę:

Kopiuj

int tab[][] =
                {{1, 1, 3, 4, 5, 1},
                 {8, 7, 3},
                 {5, 5,}};

        int k = 0;

        for (int i = 0; i < tab.length; i++) {
            for (int j = 0; j < tab.length; j++) {
                for (int p = j+1; p < tab.length; p++) {
                    if (tab[i][j] == tab[i][p] && j != p)
                        k++;
                }
            }

        }

Chcę zliczyć powtarzające się w niej wartości. Jak ustawić iterację w pętli, aby nie pojawiał się wyjątek java.lang.ArrayIndexOutOfBounds? Czy w ogóle jest to możliwe dla tablic szarpanych?

EL
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
     for (int i = 0; i < tab.length; i++) {
            for (int j = 0; j < tab.length; j++) {

Druga pętla nie powinna iterować do długości tab tylko tab[i] czyli:

Kopiuj
     for (int i = 0; i < tab.length; i++) {
            for (int j = 0; j < tab[i].length; j++) {

powinno rozwiązać problem.

LP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 366
1

Moja rada: użyj ~mapy <int, int> w której kluczem będzie wartość z tablicy a w wartości tej mapy będzie jej częstość.
Dzięki temu będziesz mógł zmniejszyć złożoność oraz kod będzie czystszy.

KE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
2
lubie_programowac napisał(a):

Moja rada: użyj ~mapy <int, int> w której kluczem będzie wartość z tablicy a w wartości tej mapy będzie jej częstość.
Dzięki temu będziesz mógł zmniejszyć złożoność oraz kod będzie czystszy.

Ale większe użycie pamięci: http://openjdk.java.net/jeps/218

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.