IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
James
Člen
Avatar
James:23.11.2014 17:07

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ý
Tvůrce
Avatar
Odpovídá na James
Jan Vargovský:23.11.2014 17:11

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
Tvůrce
Avatar
Odpovídá na James
tomisoka:23.11.2014 17:24

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:23.11.2014 17:37

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:23.11.2014 17:38

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:23.11.2014 17:39

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
Tvůrce
Avatar
Odpovídá na James
tomisoka:23.11.2014 17:52

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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
23.11.2014 17:52
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na James
Jan Vargovský:23.11.2014 17:56

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
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.