无法在android中生成随机图像

时间:2017-04-04 05:59:58

标签: java android arrays random int

我试图从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的答案之后)。

1 个答案:

答案 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)