if语句允许代码在不应该运行时运行

时间:2013-10-18 16:13:43

标签: android eclipse

我不知道为什么在我的代码中发生了这种情况,因为我觉得它应该没问题,尽管我整天都在这里。

我的问题是,我有一个计数,当选中一个复选框时会递增,或者在取消选中时会减少,最多允许4个选项,并且提示你不能选择第5个。

选择1 - 3工作正常 - 我将我的变量输出到log cat并且它上下都很好但是当我按下第四个选项时我按下第5个它允许它在我说premCount<=4的地方。 / p>

警告显示在第6次按下,但允许用户解雇然后再次选择它,并且当它不应该继续时继续。

这是我的代码:

public void handlePremCheckboxClick(View v){
    CheckBox tmpChkBox = (CheckBox) findViewById(v.getId());
    if (premCounter<=4){ <---this part is allowing 5, 6, 7, etc presses through
        if(tmpChkBox.isChecked())
        {
            tmpChkBox.setBackgroundColor(Color.parseColor("#ff33b5e5"));
            premCounter++;
        }
        if(tmpChkBox.isChecked()== false)
        {
            tmpChkBox.setBackgroundColor(Color.TRANSPARENT);
            premCounter--;
        }
    }else if(premCounter >4) {
        tmpChkBox.setChecked(false);
        tmpChkBox.setBackgroundColor(Color.TRANSPARENT);
        premCounter--;

        AlertDialog.Builder alert = new AlertDialog.Builder(this);
        alert.setTitle("Max Teams Reached")
        .setMessage("You have selected the max of 4 Premiership teams")
        .setPositiveButton("OK", null)
        .show(); 
    }   
    System.out.println(premCounter);

}

logcat的:

10-18 17:10:58.859: D/OpenGLRenderer(25923): Enabling debug mode 0
10-18 17:11:06.146: D/dalvikvm(25923): GC_FOR_ALLOC freed 125K, 2% free 9286K/9448K, paused 17ms, total 17ms
10-18 17:11:06.377: W/IInputConnectionWrapper(25923): finishComposingText on inactive InputConnection
10-18 17:11:07.258: I/System.out(25923): 1
10-18 17:11:07.488: I/System.out(25923): 2
10-18 17:11:07.748: I/System.out(25923): 3
10-18 17:11:08.039: I/System.out(25923): 2
10-18 17:11:08.689: I/System.out(25923): 3
10-18 17:11:08.939: I/System.out(25923): 4
10-18 17:11:09.240: I/System.out(25923): 5
10-18 17:11:09.550: I/System.out(25923): 4
10-18 17:11:10.461: I/System.out(25923): 5
10-18 17:11:10.801: I/System.out(25923): 4
10-18 17:11:11.843: I/System.out(25923): 5
10-18 17:11:12.483: I/System.out(25923): 4
10-18 17:11:13.444: I/System.out(25923): 5
10-18 17:11:13.695: I/System.out(25923): 4
10-18 17:11:14.706: I/System.out(25923): 5
10-18 17:11:15.086: I/System.out(25923): 4
10-18 17:11:16.217: I/System.out(25923): 5

1 个答案:

答案 0 :(得分:1)

我认为我可以看到几件事:

首先,您要将premCounter初始化为0吗?这意味着它将允许:0, 1, 2, 3, 4这是五个项目..

第二次,您在premCounter中递减else。你不应该这样做。如果已经检查了4个项目(premCounter>=4),那么如果已经选中了复选框,则允许取消选中它并减少计数器。如果尚未选中,则显示警告(现在正在尝试检查新项目)

所以基本上这应该有效:

public void handlePremCheckboxClick(View v)
{
    CheckBox tmpChkBox = (CheckBox) findViewById(v.getId());
    if (premCounter < 4) {
        if (tmpChkBox.isChecked()) {
            tmpChkBox.setBackgroundColor(Color.parseColor("#ff33b5e5"));
            premCounter++;
        }
        if (tmpChkBox.isChecked() == false) {
            tmpChkBox.setBackgroundColor(Color.TRANSPARENT);
            premCounter--;
        }
    }
    else { // 4 have already been checked, now only allow unchecking.
        tmpChkBox.setChecked(false);
        tmpChkBox.setBackgroundColor(Color.TRANSPARENT);
        if (!tmpChkBox.isChecked()) {
            premCounter--;
        }
        else {
            AlertDialog.Builder alert = new AlertDialog.Builder(this);
            alert.setTitle("Max Teams Reached")
                    .setMessage("You have selected the max of 4 Premiership teams")
                    .setPositiveButton("OK", null)
                    .show();
        }
    }
    System.out.println(premCounter);

}

更新:我在上一版本中检查错误。解释仍然保持不变。