所以,我正在尝试设置一系列复选框,点击后会添加一个数字,具体取决于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));
}
我周五才开始尝试弄清楚这个编程的东西,所以请保持温和。
答案 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;
}