Szarpana tablica dwuwymiarowa - pętla

0

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


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?

2
     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:

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

powinno rozwiązać problem.

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.

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1