Kezdőoldal » Számítástechnika » Programozás » Miért okoz a program futási...

Miért okoz a program futási hibát: ArrayIndexOutBound Exception?

Figyelt kérdés

class Foo{


public static void main(String[] args){


List<Integer> list = Arrays.asList(1,3,5,7,9);


for(int i : list){


System.out.println(list.get(i)+ ",");

}

}

}



#programozás #Java #futási hiba
2016. jan. 8. 13:38
 1/3 anonim ***** válasza:

Azert, mert rosszul hasznalod a for ciklust.


Ilyenkor az i maga az elem - tehat az i ertekei egymas utan: 1 - 3 - 5 - 7 - 9


Ebbol kifolyolag te ki akarod olvasni az 5 elemu tombbol az elso, harmadik, otodik, hetedik, kilencedik elemet - ami IndexOutBound hibat ad.


A helyes megoldas ilyenkor:


System.out.println(i + ",");

2016. jan. 8. 13:48
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:
for(int i : list) - itt 'i' változó mindig felveszi a következő listaelem értékét. Tehát 'i' változó értéke az egyes iterációkba 1, 3, 5, 7 stb. És te mindig az i-edik elemet kéred le. Tehát az elsőt, aztán a harmadikat, ötödiket...és itt száll el, mert a lista nullától indexel, öt elemű, tehát a legmagasabb index a 4. Az 5. elem nem létezik.
2016. jan. 8. 13:49
Hasznos számodra ez a válasz?
 3/3 anonim ***** válasza:

A kollégák tkp. már leírták előttem egyszerűen a megoldást.


Arra figyelj oda, hogy iterátor használatánál az elöl látható változó konkrét elem lesz.

Ez azt jelenti, hogy a következő iterátor:


˙˙˙˙for (int n : list) {

˙˙˙˙˙˙˙˙// work with n

˙˙˙˙}


megegyezik az alábbi for ciklussal:


˙˙˙˙for (int i = 0; i < list.size(); i++) {

˙˙˙˙˙˙˙˙int n = list.get(i);

˙˙˙˙˙˙˙˙// work with n

˙˙˙˙}


Világosan látható, miért okozott hibát a programod.


Egyébként igyekezz kerülni a problémás változónevek használatát:

- Ha "list"-nek nevezel egy változót, és később változik a típusa, abból előbb-utóbb félreértés, a félreértésből pedig idegőrlő hiba lesz. Ne tedd. ("numbers" megfelelhet)

- Az "i" változónevet hagyományos - többnyire for - ciklusokban használjuk INDEX gyanánt. Kerüld a más jellegű használatát, mert félrevezető lehet, amiből meg ugye hiba adódhat. A példádban az az "i" legyen bármi más (angol szó), de ne "i", hiszen nem egy index, hanem egy elem ("item", "number", stb. megfelelhet).

2016. jan. 8. 15:49
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!