我试图从Android应用中的数组生成多次随机图像。
但是这些图像是生成一次跳过并尝试将剩余图像存储在新数组中 再次选择一个新的随机图像。但有一段时间我的应用程序崩溃是由于" IllegalArgumentException:n< = 0:0" 那么如何解决这个问题?
这是我的代码:
all = new int[]{R.id.img3_1, R.id.img3_2, R.id.img3_3, R.id.img3_4,R.id.img3_5, R.id.img3_6, R.id.img3_7, R.id.img3_8,
R.id.img3_9,R.id.img3_10,R.id.img3_11,R.id.img3_12,R.id.img3_13,R.id.img3_14,R.id.img3_15,R.id.img3_16};
id = all[random.nextInt(all.length)];
ObjectAnimator animator = ObjectAnimator.ofInt(findViewById(id), "backgroundResource", R.drawable.new_stateimg, R.drawable.org_state).setDuration(2000);
animator.setEvaluator(new ArgbEvaluator());
animator.start();
final int index = Ints.indexOf(all, id);
all2 = Arrays.copyOf(all, index);
id1 = all2[random.nextInt(all2.length)];
ObjectAnimator animator1 = ObjectAnimator.ofInt(findViewById(id1), "backgroundResource", R.drawable.new_stateimg, R.drawable.org_state).setDuration(2000);
animator1.setEvaluator(new ArgbEvaluator());
animator1.start();
final int index1 = Ints.indexOf(all2, id1);
int[] all3 = Arrays.copyOf(all2, index1);
id2 = all3[random.nextInt(all3.length)];//line 271
ObjectAnimator animator2 = ObjectAnimator.ofInt(findViewById(id2), "backgroundResource", R.drawable.new_stateimg, R.drawable.org_state).setDuration(2000);
animator2.setEvaluator(new ArgbEvaluator());
animator2.start();
我的日志:
FATAL EXCEPTION: main
Process: brainreadersystem.com.ncss, PID: 7474
java.lang.IllegalArgumentException: n <= 0: 0
at java.util.Random.nextInt(Random.java:182)
at brainreadersystem.com.ncss.Game.linear16(Game.java:271)
at brainreadersystem.com.ncss.Game.check(Game.java:236)
at brainreadersystem.com.ncss.Game.access$000(Game.java:20)
at brainreadersystem.com.ncss.Game$4.onClick(Game.java:184)
at android.view.View.performClick(View.java:4848)
at android.view.View$PerformClick.run(View.java:20262)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5637)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
更新 上述代码的场景:
例如,我有一个像3 * 3 = 9的图像视图,我想改变一些图像的颜色(9图像中的3个)。但是现在有一段时间由于上面的代码而只有一个颜色(在使用了slipperyseal的答案之后)。
答案 0 :(得分:0)
random.nextInt()
,其值为零。它无法找到0到0之间的随机数,因此是异常。
当长度为random.nextInt()
的第一个all.length
调用恰好返回时,看起来会发生这种情况。
id = all[random.nextInt(all.length)]; // element at index zero
这将all2的长度条件设置为零,作为索引0处的id。
final int index = Ints.indexOf(all, id); // index zero
all2 = Arrays.copyOf(all, index); // zero length array
id1 = all2[random.nextInt(all2.length)]; // kaboom!
我不会提供解决方案,因为我不太了解您的代码需要做什么。这样的事情会阻止它爆炸,但我不确定它对你想要实现的目标是否正确。如果索引为0则强制它为1 ..
all2 = Arrays.copyOf(all, index == 0 ? 1 : index);
(并将其应用于all3)