那么,为什么我的开关盒会影响以下所有情况?
因此,我试图设置一系列复选框,单击时会添加一个数字,具体取决于复选框,以指向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:
前从switch语句中断开。否则,任何遇到R.id.checkBox1
的东西都会继续,并执行R.id.checkBox2
的所有逻辑。 (在所有其他情况下,您还需要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;
}
变成了:你需要有一个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-29 20:31:14
@RobHodgson编辑显示我的意思。每个'case'语句的代码变成了它自己的方法(函数)。我在switch语句中调用了该方法,使它更清晰,更易于遵循。 – 2012-07-30 00:28:54
你忘了加入 break;每个案例结束时都会有 。
从这个以及所有其他的回答中,我怀疑我的问题确实是缺乏休息。我会把这些信息放回去,让大家知道该程序是如何工作的。谢谢! – 2012-07-29 20:33:17
这工作得很好!除了最后一个给我带来一些麻烦的案例。尽管我会把它作为一个新问题发布,因为我不认为它是相关的。 – 2012-07-29 23:25:00
@RobHodgson,在你去问一个新问题之前,你如何尝试**调试**? – 2012-07-30 00:20:26