在我的记忆游戏中需要帮助

时间:2014-01-03 12:31:08

标签: java android variables loops handler

我目前正在尝试编写一个有4个盒子的记忆游戏,在4个盒子中将有4个随机选择。然后用户必须记住它们并以正确的顺序输入4个框。

但我目前面临一个问题。好像handler只允许final variable。这是我的代码:

private OnClickListener click1 = new OnClickListener() {

 @Override
    public void onClick(View v) {
            final ImageButton[] all= {btn1, btn2, btn3, btn4};

            for (int a=0;a<4;a++) {

            handler1.postDelayed(new Runnable() { //start delay a

                @Override
                public void run() {
                //actions start

                btn5 = all[random.nextInt(all.length)];
                btn5.setBackgroundColor(Color.RED);

                handler1.postDelayed(new Runnable() { //start delay b
                @Override
                public void run() {

                btn5.setBackgroundResource(R.drawable.btn_default_holo_dark); 

                }}, 500); //end delay b 
                //action end

                }}, 1000*a ); //end delay a

                } 
            } 
        };

我尝试在其中放置4 variable来存储btn5的数据,但它不起作用,并显示错误,因为a必须是最终的。

               btn5 = all[random.nextInt(all.length)];

               if (a==0) {ans1 = btn5;} //error
               else if (a==1) {ans2 = btn5;} //error
               else if (a==2) {ans3 = btn5;} //error
               else if (a==3) {ans4 = btn5;} //error

               btn5.setBackgroundColor(Color.RED);

是否有任何方法允许我的if else声明?或者是否有其他方法可以让我按顺序存储btn5数据?

2 个答案:

答案 0 :(得分:0)

在监听器之外,在类级别声明您的all数组并重复使用

答案 1 :(得分:0)

一种方法是在for循环中声明final变量,以便匿名内部类可以访问它。因此,请在handler1.postDelayed(new Runnable() { //start delay a之前添加此行:

final int aValue = a;

然后用a替换 if / if else aValue。像这样:

if (aValue==0) {ans1 = btn5;}

匿名内部类如何获取for循环中声明的值。