Android ArrayIndexOutOfBoundsException错误长度= 12;指数= -1

时间:2019-06-24 03:43:06

标签: java android

我想在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

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

int secilen = rastgele.nextInt(resimsayi.size()-1)+1;
int secilenindex = secilen;

与上述类似,在所有位置替换。生成数字时将避免使用0。

此外,如下修改所有remove()语句:

resimsayi.remove(secilen);

而不是:

resimsayi.remove(resimsayi.indexOf(secilen));