gpt4 book ai didi

java - Android ArrayIndexOutOfBoundsException 错误长度=12;索引=-1

转载 作者:行者123 更新时间:2023-12-02 09:45:00 27 4
gpt4 key购买 nike

我想在 Android 中制作一个拼图应用程序。但我在日志中收到此错误:

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

而且我找不到解决该问题的错误代码。

我写了这段代码:

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

如何解决这个问题?

最佳答案

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

与上面类似地替换所有地方。这样在生成数字number的时候就可以避免0了。

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

resimsayi.remove(secilen);

而不是:

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

关于java - Android ArrayIndexOutOfBoundsException 错误长度=12;索引=-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56729590/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com