繁体   English   中英

那么,为什么我的切换案例会影响以下所有案例?

[英]So, why is my switch case affecting all the following cases?

因此,我正在尝试设置一系列复选框,当单击它们时,将根据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));
            }

我只是在星期五才开始尝试弄清楚这些编程知识,所以请保持谨慎。

就在case R.id.checkBox2:之前case R.id.checkBox2:您需要break; 告诉程序从switch语句中断。 否则,任何满足R.id.checkBox1只是继续通过并执行所有必须的逻辑R.id.checkBox2为好。 (您需要break;在所有其他情况之前也需要break; )。

你忘记加休息了; 在每种情况下

在每种case您都忘记了break语句。 每次都进入下一个案例。

另外,我强烈建议不要在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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM