2014-01-23 99 views
0

我有25個圖像按鈕和1個隨機按鈕。當我點擊洗牌按鈕時,這些按鈕將隨機顯示圖片無重複。我的問題是每當我點擊shuffle按鈕時都會出現錯誤。它說,「不幸的是,'App_Name'已停止。」請幫幫我。 :([解決] imagebutton沒有重複(圖片拼圖)的隨機圖像

Shuffle.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      final int[] easy1 = {R.drawable.a11,R.drawable.a12,R.drawable.a13,R.drawable.a14,R.drawable.a15 
        ,R.drawable.a16,R.drawable.a17,R.drawable.a18,R.drawable.a19,R.drawable.a110 
        ,R.drawable.a111,R.drawable.a112,R.drawable.a113,R.drawable.a114,R.drawable.a115 
        ,R.drawable.a116,R.drawable.a117,R.drawable.a118,R.drawable.a119,R.drawable.a120 
        ,R.drawable.a121,R.drawable.a122,R.drawable.a123,R.drawable.a124}; 
      int[] a = new int[25]; 
      int i = 0; 
      int j = 0; 
      boolean flag = false; 

      flag = false; 
      i = 0; 
      a[j] = 1; 

      while (i <= 23){ 
      rnd = (int)((Math.random() * 23)+1); 

      for (j = 1; j <= i; j++){ 
        if (a[j] == rnd) 
       { 
        flag = true; 

       } 
      } 

      if (flag == true) 
       { 
        flag = false; 
       } 
       else 
       { 
        a[i] = rnd; 
        i = i + 1; 
       } 
      } 


    iv1.setImageResource(easy1[a[0]]); 
    iv2.setImageResource(easy1[a[1]]); 
    iv3.setImageResource(easy1[a[2]]); 
    iv4.setImageResource(easy1[a[3]]); 
    iv5.setImageResource(easy1[a[4]]); 
    iv6.setImageResource(easy1[a[5]]); 
    iv7.setImageResource(easy1[a[6]]); 
    iv8.setImageResource(easy1[a[7]]); 
    iv9.setImageResource(easy1[a[8]]); 
    iv10.setImageResource(easy1[a[9]]); 
    iv11.setImageResource(easy1[a[10]]); 
    iv12.setImageResource(easy1[a[11]]); 
    iv13.setImageResource(easy1[a[12]]); 
    iv14.setImageResource(easy1[a[13]]); 
    iv15.setImageResource(easy1[a[14]]); 
    iv16.setImageResource(easy1[a[15]]); 
    iv17.setImageResource(easy1[a[16]]); 
    iv18.setImageResource(easy1[a[17]]); 
    iv19.setImageResource(easy1[a[18]]); 
    iv20.setImageResource(easy1[a[19]]); 
    iv21.setImageResource(easy1[a[20]]); 
    iv22.setImageResource(easy1[a[21]]); 
    iv23.setImageResource(easy1[a[22]]); 
    iv24.setImageResource(easy1[a[23]]); 
    iv25.setImageResource(R.drawable.a3); 
     } 

    }); 

logcat的:

9月1日至23日:08:44.004:E/AndroidRuntime(981):致命異常:主

9月1日至23日:08:44.004:E/AndroidRuntime(981):java.lang.ArrayIndexOutOfBoundsException:length = 24; index = 24

01-23 09:08:44.004:E/AndroidRuntime(981):at com.jepoy.Shift.Main $ 1.onClick( Main.java:102)

01-23 09:08:44.004:E/Andr oidRuntime(981):at android.view.View.performClick(View.java:4084)

01-23 09:08:44.004:E/AndroidRuntime(981):at android.view.View $ PerformClick.run (View.java:16966)

9月1日至23日:08:44.004:E/AndroidRuntime(981):在android.os.Handler.handleCallback(Handler.java:615)

9月1日至23日:08:44.004:E/AndroidRuntime(981):在android.os.Handler.dispatchMessage(Handler.java:92)

01-23 09:08:44.004:E/AndroidRuntime(981):在android。 os.Looper.loop(Looper.java:137)

9月1日至23日:08:44.004:E/AndroidRuntime(981):在android.app.ActivityThread.main(ActivityThread.java:4745)

9月1日至23日:08:44.004:E/AndroidRuntime( 981):在java.lang.reflect.Method.invokeNative(本地方法)

01-23 09:08:44.004:E/AndroidRuntime(981):at java.lang.reflect.Method.invoke(Method。 Java的:511)

九月一日至23日:08:44.004:E/AndroidRuntime(981):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)

01 -23 09:08:44.004:E/AndroidRu ntime(981):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)

01-23 09:08:44.004:E/AndroidRuntime(981):at dalvik.system.NativeStart 。主要(本地方法)

9月1日至23日:09:42.344:E /跟蹤(1029):錯誤打開跟蹤文件:沒有這樣的文件或目錄(2)

+1

你可以看看LogCat並粘貼紅色的錯誤信息嗎?這將有助於解決錯誤:) –

+0

LogCat發佈。 :) – JepoyCastle

回答

0

final int[] easy1有24個元件,因此它被編入索引0至23。如果的Math.random()返回剛剛低於1的值,然後乘以24會得出一個介於23和24之間的值。然後加1得到一個介於24和25之間的值,該值被int轉換爲24。

因此,像iv1.setImageResource(easy1[a[1]]);這樣的行可能會嘗試訪問索引24處的easy1,從而導致出錯。

順便說一下,代碼會更清晰,並有可能避免的錯誤,如果你創建了java.util.Random的實例,並用它來生成一個整數的隨機數:然後

Random random = new Random(); 
//... 
rnd = random.nextInt(23) + 1; 

RND將包含隨機整數從1到23.

+0

它現在正在工作,但有兩個按鈕具有相同的圖片 – JepoyCastle

+0

在這種情況下,您想要的行爲是由Collections.shuffle()方法給出的,而不是基於隨機索引進行分配。對於那種方法,你需要給它一個List。 – Jems

0

它從你的logcat很清楚什麼錯誤是:

01-23 09:08:44.004: E/AndroidRuntime(981): java.lang.ArrayIndexOutOfBoundsException: length=24; index=24 

如果數組的長度是24,那麼索引應該是0-23。在你的情況下,索引達到24 tehreby導致索引錯誤。

請確保您的索引不應超過23,以防您有24個項目。或者讓你的數組大小爲25:int [] a = new int [25];

+0

它仍然得到相同的錯誤。 :( – JepoyCastle