0

I want to make a puzzle app in android. But I get this error in the log :

java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1 etc.

And I can't find the error code to solve it.

I wrote this code:

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");

The logs:

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

How can I resolve this problem?

shb
  • 5,957
  • 2
  • 15
  • 32

1 Answers1

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

Replace everywhere similarly as above. This will avoid 0 when generating the number number.

Also, modify all the remove() statement as below :

resimsayi.remove(secilen);

instead of :

resimsayi.remove(resimsayi.indexOf(secilen));
Azhar92
  • 923
  • 2
  • 8
  • 17
  • I get the same error. – Veli Gokturk Jun 24 '19 at 04:28
  • The above was sample code for the first one. You need to replace everywhere like above wherever you are using nextInt. I have edited everywhere for you. Try this code : https://pastebin.com/raw/GpcQdR4p – Azhar92 Jun 24 '19 at 04:46
  • I get the same problem. How I can block 0 in random? – Veli Gokturk Jun 24 '19 at 05:15
  • @VeliGokturk : I have edited my code above. Try that. It is to avoid 0 – Azhar92 Jun 24 '19 at 07:49
  • secilenindex is secilen or secilen-1? – Veli Gokturk Jun 24 '19 at 07:54
  • I'm confused, if `resimsayi.size()` returns 0, and you remove 1 (`-1`) then `nextInt` will throw `IllegalArgumentException("bound must be positive");` – Zun Jun 24 '19 at 08:02
  • 1
    @Azhar92 I tried. I get the same error. '1 secildi secilen value: 4 secilenindex : 4 resimsayi : [1, 2, 3, 5, 6, 7, 8, 9] W/2 secildi( 9228): 2 secildi index alindi silindi W/degiskenlerr( 9228): secilen değer : 5 secilenindex: 5 resimsayi[1, 2, 3, 6, 7, 8, 9] E/AndroidRuntime( 9228): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.x_ren.dnm/com.example.xxxx.dnm.gosterim}: java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1 E/AndroidRuntime( 9228): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1' – Veli Gokturk Jun 24 '19 at 16:47
  • Please check the code again. I have edited . Issue was in the remove statement. I have also tested. Seems to be working fine. @VeliGokturk – Azhar92 Jun 25 '19 at 04:22
  • @Azhar92 thanks a lot. – Veli Gokturk Jun 25 '19 at 20:58