0

所以,我正在尝试设置一系列复选框,当单击这些复选框时,将添加一个数字,具体取决于该复选框到 int 变量attackTotal 或damageTotal,这将依次显示在一些文本视图中。

然而,目前,单击顶部复选框的行为就像我同时单击了它,以及 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));
            }

我只是在星期五才开始尝试弄清楚这些编程内容,所以要温柔。

4

3 回答 3

3

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

于 2012-07-29T18:04:14.317 回答
1

你忘了加休息;在每一个案例的最后。

于 2012-07-29T18:04:22.153 回答
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;
    }
于 2012-07-29T18:03:11.767 回答