Diskuze: Array Index Out Of Bounds Exception

Java Java Array Index Out Of Bounds Exception

Avatar
James
Člen
Avatar
James:

Mám tento kód :

public void Load(String way, int tileSize) {
                this.tileSize = tileSize;
                try {
                        BufferedReader reader = new BufferedReader(new FileReader(way));

                        mapW = Integer.parseInt(reader.readLine());
                        mapH = Integer.parseInt(reader.readLine());

                        String delimiters = " ";
                        map = new int[mapW][mapH];
                        for (int row = 0; row < mapH; row++) {
                                String line = reader.readLine();
                                String[] tokens;
                                tokens = line.split(delimiters);
                                for (int col = 0; col < mapW; col++) {
                                        map[row][col] = Integer.parseInt(tokens[col]);
                                }
                        }


                        for (int x = 0; x < mapH; x++) {
                                for (int y = 0; y < mapW; y++) {
                                        System.out.print(map[x][y]);
                                }
                        }

                }
                catch (Exception e) {
                        e.printStackTrace();
                }

        }

a hazí mi to tento exception : array index out of bounds exception

Odpovědět 23.11.2014 17:07
Slovo nikdy znamená že cesta k cíly je pouze o něco těžší než se zdálo.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na James
Jan Vargovský:

Co nám k tomu přiložit ten soubor, ze kterého to načítáš? Plus říct na jakém řádku to vyhazuje tu vyjímku?

 
Nahoru Odpovědět 23.11.2014 17:11
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na James
tomisoka:

Ta chyba znamená, že zasahuješ mimo rozsah pole, co třeba se na to pozorně podívat?

map = new int[mapW][mapH];
row < mapH
col < mapW
map[row][col] =
 
Nahoru Odpovědět 23.11.2014 17:24
Avatar
James
Člen
Avatar
Odpovídá na tomisoka
James:

Bohužel nechápu vaši odpověď. :)

Nahoru Odpovědět 23.11.2014 17:37
Slovo nikdy znamená že cesta k cíly je pouze o něco těžší než se zdálo.
Avatar
James
Člen
Avatar
James:

jo a ten soubor:
4
4
0011
1100
0011
1100

Nahoru Odpovědět 23.11.2014 17:38
Slovo nikdy znamená že cesta k cíly je pouze o něco těžší než se zdálo.
Avatar
James
Člen
Avatar
Odpovídá na Jan Vargovský
James:

Na řádku : map[row][col] = Integer.parse­Int(tokens[col]);
a soubor:
4
4
0011
1100
0011
1100

Nahoru Odpovědět 23.11.2014 17:39
Slovo nikdy znamená že cesta k cíly je pouze o něco těžší než se zdálo.
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na James
tomisoka:

Poukazoval jsem na chybu, která by vznikla pokud by mapW != mapH. Jak říkám pozorně se na to podívej.
Jinak ještě jsem se na to kouknul a našel jsem ještě jednu chybu, díky které ti to padá -> koukni se na délku pole "tokens".

Editováno 23.11.2014 17:52
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 23.11.2014 17:52
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na James
Jan Vargovský:

Splituješ pomocí mezer (tokens = line.split(' ');), ale mezi jednotlivými indexy tam žádné mezery nejsou. Odkrokuj si to, zjisti co máš v každém řádku a co tam je po splitnutí. Je lepší zauvažovat než čekat x hodin od někoho na odpověď.

 
Nahoru Odpovědět  +1 23.11.2014 17:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.