2017-04-04 5 views
1

アンドロイドアプリで配列から何回もランダムな画像を生成しようとしています。アンドロイドで何回かランダムな画像を生成できません

これらの画像はスキップされ、残りの画像を新しい配列に格納しようとしたときに一度生成され、 は新しいランダム画像を再度選択します。しかし、 "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

random.nextInt()が0の値で呼び出されています。 0と0の間の乱数を見つけることができないため、例外が発生します。

all.lengthという長さの最初のrandom.nextInt()コールが返された場合、このようになります。

id = all[random.nextInt(all.length)]; // element at index zero 

これは私が実際に何を理解していないので、インデックス0

final int index = Ints.indexOf(all, id); // index zero 
    all2 = Arrays.copyOf(all, index);   // zero length array 
    id1 = all2[random.nextInt(all2.length)]; // kaboom! 

のIDとして、私は修正を提供することはありません、ゼロにするALL2の長さのための条件を設定しますあなたのコードが行う必要があります。このようなものは爆発を止めるだろうが、私はそれがあなたが達成しようとしていることについて正しいのか分からない。インデックスは1から0力、それを...

all2 = Arrays.copyOf(all, index == 0 ? 1 : index); 

(およびALL3に同じを適用)

+0

であれば、あなたの答えは、アプリのクラッシュの問題を修正が、今いくつかの時間は、それが唯一のImageViewの仕事します。 –

+0

たとえば、私は3 * 3 = 9のようなイメージビューを持っていて、いくつかのイメージの色を変更したい(9のうちの3イメージ)。今は上記のコードのために1つしか色づけができません。 –

+0

だから、私の意見があるかどうか。 –

関連する問題