那么,为什么我的开关盒会影响以下所有情况呢?

时间:2012-07-29 18:00:19

标签: android switch-statement

所以,我正在尝试设置一系列复选框,点击后会添加一个数字,具体取决于int变量attackTotal或damageTotal的复选框,而后者将在某些文本视图中显示。 / p>

然而,目前,单击顶部复选框就像我在switch语句中单击它以及其后面的每个复选框一样。第二个点击框似乎激活了自己以及以下所有,等等等......

所以这是我和我们在一起的代码。

public void onCheckboxClicked(View v) {
    // Is the view now checked?
    boolean checked = ((CheckBox) v).isChecked();


    // Check which checkbox was clicked
    switch(v.getId()) {

    case R.id.checkBox1:
        if (checked)
                {
                flankAttack=2;
                }

        else
                {
                flankAttack=0;
                }

    case R.id.checkBox2:
        if (checked)
                {
                pbs=1;                  
                }
        else
                {
                pbs=0;
                }

一直到......

        case R.id.checkBox10:
            if (checked)
            {
                attackTotal=attack+flankAttack+pbs;
                damageTotal=damage+pbs;

                TextView textView = (TextView) findViewById(R.id.textView2);
                TextView textView2 = (TextView) findViewById(R.id.textView4);
                textView.setText(Integer.toString(attackTotal));
                textView2.setText(Integer.toString(damageTotal));
            }
            else
            {
                attackTotal=attack+flankAttack+pbs;
                damageTotal=damage+pbs;

                TextView textView = (TextView) findViewById(R.id.textView2);
                TextView textView2 = (TextView) findViewById(R.id.textView4);
                textView.setText(Integer.toString(attackTotal));
                textView2.setText(Integer.toString(damageTotal));
            }

我周五才开始尝试弄清楚这个编程的东西,所以请保持温和。

3 个答案:

答案 0 :(得分:3)

case R.id.checkBox2:之前,您需要break;来告诉程序从switch语句中断。否则,遇到R.id.checkBox1的任何事情都会继续,并执行R.id.checkBox2的所有逻辑。 (在所有其他情况之前,您还需要break;。)

答案 1 :(得分:1)

你忘记了添加 打破; 在每个案件的最后。

答案 2 :(得分:0)

您在每个break之后忘记了case语句。它每次都会落到下一个案例。

另外,我强烈建议不要在case语句中添加多行代码,否则会很快变得难看并且难以使用。相反,将每个案例拉出到自己的方法中。通常很容易为每个自我记录的人提出一个好名字:

switch (foo) {
    case 0:
        do();
        lots();
        of();
        things();
        break;
    case 1:
        do();
        other();
        things();
        break;
    case 2:
        if (ugly)
        {
            this_gets();
            messy();
            quickly();
        }
        else
        {
            we_could();
            do_better();
        }
        break;
}

变为:

void do_case_0() {
    do();
    lots();
    of();
    things();
}

void do_case_1() {
    do();
    other();
    things();
}

void do_case_2() {
    if (ugly)
    {
        this_gets();
        messy();
        quickly();
    }
    else
    {
        we_could();
        do_better();
    }
}


// ...
    switch (foo) {
        case 0:    do_case_0();    break;
        case 1:    do_case_1();    break;
        case 2:    do_case_2();    break;
    }