我想在android中制作一个益智应用。但我在日志中收到此错误:
java.lang.ArrayIndexOutOfBoundsException:length = 12; index = -1等
我找不到错误代码来解决它。
我写了这段代码:
ArrayList<Integer> resimsayi = new ArrayList<Integer>();
resimsayi.add(1);
resimsayi.add(2);
resimsayi.add(3);
resimsayi.add(4);
resimsayi.add(5);
resimsayi.add(6);
resimsayi.add(7);
resimsayi.add(8);
resimsayi.add(9);
ArrayList<Integer> resimler = new ArrayList<Integer>();
resimler.add(R.drawable.ari);
resimler.add(R.drawable.aslan);
resimler.add(R.drawable.ayi);
resimler.add(R.drawable.fil);
resimler.add(R.drawable.kedi);
resimler.add(R.drawable.kopek);
resimler.add(R.drawable.koyun);
resimler.add(R.drawable.maymun);
resimler.add(R.drawable.zurafa);
ArrayList<String> resimad = new ArrayList<String>();
resimad.add("ari");
resimad.add("aslan");
resimad.add("ayi");
resimad.add("fil");
resimad.add("kedi");
resimad.add("kopek");
resimad.add("koyun");
resimad.add("maymun");
resimad.add("zurafa");
Random rastgele = new Random();
Log.w("hello", "hello");
int secilen = rastgele.nextInt(resimsayi.size());
int secilenindex = secilen-1;
resimb4.setImageResource(resimler.get(secilenindex));
resimsayi.remove(resimsayi.indexOf(secilen));
Log.w("1 secildi", "1 secilddi index alindi silindi");
Log.w("degiskenlerrr", "secilen değer : " + secilen + " secilenindex : " + secilenindex + " resimsayi : " + resimsayi);
bulmacat.setText(resimad.get(secilenindex) + "secilen : " + secilen + "resimsayi secilen get : " + resimsayi.get(secilen-1) + "resimsayi : " + resimsayi);
int resimd1 = rastgele.nextInt(resimsayi.size());
int resimd1index = resimd1-1;
resimb1.setImageResource(resimler.get(resimd1index));
resimsayi.remove(resimsayi.indexOf(resimd1));
Log.w("2 secildi", "2 secildi index alindi silindi");
Log.w("degiskenlerr", "secilen değer : " + resimd1 + " secilenindex: " + resimd1index + " resimsayi" + resimsayi);
int resimd2 = rastgele.nextInt(resimsayi.size());
int resimd2index = resimd2-1;
resimb2.setImageResource(resimler.get(resimd2index));
resimsayi.remove(resimsayi.indexOf(resimd2));
Log.w("3 secildi", "3 secilddi index alindi silindi");
Log.w("degiskenlerrr", "secilen değer : " + resimd2 + " secilenindex : " + resimd1index + " resimsayi : " + resimsayi);
int resimd3 = rastgele.nextInt(resimsayi.size());
int resimd3index = resimd3-1;
resimb3.setImageResource(resimler.get(resimd3index));
resimsayi.remove(resimsayi.indexOf(resimd3));
Log.w("4 secildi", "4 secilddi index alindi silindi");
Log.w("degiskenlerrr", "secilen değer : " + resimd3 + " secilenindex : " + resimd3index + " resimsayi : " + resimsayi);
Log.w("2 3 4 secildi", " 2 3 4 secildi, index alindi, silindi");
日志:
W/hello ( 2863): hello
W/1 secildi( 2863): 1 secilddi index alindi silindi
W/degiskenlerrr( 2863): secilen değer : 6 secilenindex : 5 resimsayi : [1, 2, 3, 4, 5, 7, 8, 9]
W/2 secildi( 2863): 2 secildi index alindi silindi
W/degiskenlerr( 2863): secilen değer : 2 secilenindex: 1 resimsayi[1, 3, 4, 5, 7, 8, 9]
E/AndroidRuntime( 2863): FATAL EXCEPTION: main
E/AndroidRuntime( 2863): Process: com.example.x_ren.dnm, PID: 2863
E/AndroidRuntime( 2863): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.x_ren.dnm/com.example.x_ren.dnm.gosterim}: java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
E/AndroidRuntime( 2863): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
E/AndroidRuntime( 2863): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
E/AndroidRuntime( 2863): at android.app.ActivityThread.access$800(ActivityThread.java:151)
E/AndroidRuntime( 2863): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
E/AndroidRuntime( 2863): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 2863): at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime( 2863): at android.app.ActivityThread.main(ActivityThread.java:5254)
E/AndroidRuntime( 2863): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 2863): at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime( 2863): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
E/AndroidRuntime( 2863): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
E/AndroidRuntime( 2863): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
E/AndroidRuntime( 2863): at java.util.ArrayList.remove(ArrayList.java:405)
E/AndroidRuntime( 2863): at com.example.x_ren.dnm.gosterim.onCreate(gosterim.java:117)
E/AndroidRuntime( 2863): at android.app.Activity.performCreate(Activity.java:5990)
E/AndroidRuntime( 2863): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
E/AndroidRuntime( 2863): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
E/AndroidRuntime( 2863): ... 10 more
如何解决此问题?
答案 0 :(得分:1)
int secilen = rastgele.nextInt(resimsayi.size()-1)+1;
int secilenindex = secilen;
与上述类似,在所有位置替换。生成数字时将避免使用0。
此外,如下修改所有remove()语句:
resimsayi.remove(secilen);
而不是:
resimsayi.remove(resimsayi.indexOf(secilen));