Miért okoz a program futási hibát: ArrayIndexOutBound Exception?
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)+ ",");
}
}
}
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 + ",");
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).
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!