簡體   English   中英

imagebutton的隨機圖像,無重復(圖片拼圖)

[英]Random Image of imagebutton without Repetition (Picture puzzle)

我有25個圖像按鈕和1個隨機按鈕。 當我單擊隨機播放按鈕時,按鈕將隨機顯示圖片而無需重復。 我的問題是,每當我單擊隨機播放按鈕時,它就會出錯。 它說:“很遺憾,'App_Name'已停止。” 請幫幫我。 :(

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 = 1;
            a[j] = 1;

            while (i <= 24){
             rnd = (int)((Math.random() * 24)+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[1]]);
    iv2.setImageResource(easy1[a[2]]);
    iv3.setImageResource(easy1[a[3]]);
    iv4.setImageResource(easy1[a[4]]);
    iv5.setImageResource(easy1[a[5]]);
    iv6.setImageResource(easy1[a[6]]);
    iv7.setImageResource(easy1[a[7]]);
    iv8.setImageResource(easy1[a[8]]);
    iv9.setImageResource(easy1[a[9]]);
    iv10.setImageResource(easy1[a[10]]);
    iv11.setImageResource(easy1[a[11]]);
    iv12.setImageResource(easy1[a[12]]);
    iv13.setImageResource(easy1[a[13]]);
    iv14.setImageResource(easy1[a[14]]);
    iv15.setImageResource(easy1[a[15]]);
    iv16.setImageResource(easy1[a[16]]);
    iv17.setImageResource(easy1[a[17]]);
    iv18.setImageResource(easy1[a[18]]);
    iv19.setImageResource(easy1[a[19]]);
    iv20.setImageResource(easy1[a[20]]);
    iv21.setImageResource(easy1[a[21]]);
    iv22.setImageResource(easy1[a[22]]);
    iv23.setImageResource(easy1[a[23]]);
    iv24.setImageResource(easy1[a[24]]);
    iv25.setImageResource(R.drawable.a3);
        }

    });

Logcat:

01-23 09:08:44.004:E / AndroidRuntime(981):致命異常:主要

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

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

01-23 09:08:44.004:E / AndroidRuntime(981):位於android.view.View.performClick(View.java:4084)

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

01-23 09:08:44.004:E / AndroidRuntime(981):位於android.os.Handler.handleCallback(Handler.java:615)

01-23 09: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)

01-23 09:08:44.004:E / AndroidRuntime(981):位於android.app.ActivityThread.main(ActivityThread.java:4745)

01-23 09:08:44.004:E / AndroidRuntime(981):at java.lang.reflect.Method.invokeNative(本機方法)

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

01-23 09:08:44.004:E / AndroidRuntime(981):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)

01-23 09:08:44.004:E / AndroidRuntime(981):位於com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)

01-23 09:08:44.004:E / AndroidRuntime(981):在dalvik.system.NativeStart.main(本機方法)

01-23 09:09:42.344:E / Trace(1029):打開跟蹤文件時出錯:沒有這樣的文件或目錄(2)

從您的logcat中可以很清楚地看出錯誤是什么:

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

如果數組的長度為24,則索引應為0-23。 在您的情況下,索引達到24 tehreby會導致索引不足錯誤。

如果您有24個項目,請確保索引不超過23。

或者將數組的大小設置為25: int [] a = new int [25];

嘗試使用

i = 0

while (i < 24){

final int[] easy1具有24個元素,因此索引為0到23。如果Math.Random()返回的值小於1,則乘以24將得到23到24之間的值。加1則得到的值介於2和24之間。 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之間的隨機整數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM