Problem z ArrayIndexOutOfBonds

0

Witam. Posiadam taki oto fragment kodu:

public static String[][] getTabConfig(){
		String[][] tab = new String[20][3];
		for(int row = 0; row<20; row++){
			for(int col = 0; col<3; col++) tab[row][col] = "";
		}
		for(String path : pc.getSectionKeys("player-list")){
			try {
				int i = Integer.parseInt(path);
				if(COLUMNS >= 1) {
					if(i<=20) {
						tab[i][0] = pc.getString("player-list." + path);
					}
				} else continue;
				if(COLUMNS >= 2) {
					if(i>20 && i<=40) {
						tab[i-20][1] = pc.getString("player-list." + path);
					}
				} else continue;
				if(COLUMNS >= 3) {
					if(i>40 && i<=60) {
						tab[i-40][2] = pc.getString("player-list." + path);
					}
				} else continue;
				if(COLUMNS >= 4) {
					if(i>60) {
						tab[i-60][3] = pc.getString("player-list." + path);
					}
				} else continue;
				if(i > 80) continue;
			} catch (NumberFormatException e){
				FunnyGuilds.parser("[Settings] Unknown number: " + path);
			}
		}
		return tab;
	}

Generalnie po prostu nie wiem, dla czego wywala mi outofbonds: 20 w lini 11 ( tab[i][0] = pc.getString("player-list." + path); )
zmienna COLUMNS zawiera zawsze 4 a ROWS 20
plik konfiguracyjny zawiera Stringi z numerkami od 0 do 60
Po prostu już siedze nad tym 3h i nic mi nie przychodzi do głowy...
Liczę na waszą pomoc
Pozdrawiam
PrzemoVi

0
String[] tab = new String[20];

tab ma 20 elementów 'numerowanych' od 0 do 19. Nie ma elementu o indeksie 20.

 if(i<=20) {
                        tab[i][0] = pc.getString("player-list." + path);
                    }

W tym ifie sprawdzasz ten index nr 20?

0

Tak, nadaje indeksowi 20 wartość Stringa

problem rozwiązany poprzez odejmowanie od zmiennej "i" 1.
np.
tab[i][0] = pc.getString("player-list." + path);
na
tab[i-1][0] = pc.getString("player-list." + path);

tab[i-20][1] = pc.getString("player-list." + path);
na
tab[i-21][1] = pc.getString("player-list." + path);

Dzięki z podpowiedź :D

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