我想有一个开关,以记忆的菜单,我目前在其中,然后检查哪个按钮按下,以便它可以引导我到另一个活动。
目前,我已经想出了这个问题,但由于某种原因,在调试第二个案例时,甚至还没有达到case R.id.bt1。
我已经输入了变量类:public static int currentMenu = 0;,但是当我将其设置为1时,调试器就会变得很奇怪。
有人能猜出我做错了什么吗?
@Override
public void onClick(View view) {
int currentMenu = Variables.currentMenu;
switch (currentMenu) {
case 0:
switch (view.getId()) {
case R.id.bt1:
currentMenu = 1;
Variables.currentMenu = currentMenu;
checkMenu();
break;
case R.id.bt2:
currentMenu = 2;
Variables.currentMenu = currentMenu;
checkMenu();
break;
case R.id.bt3:
break;
}
case 1:
switch (view.getId()) {
case R.id.bt1:
currentMenu = 0;
Variables.currentMenu = currentMenu;
checkMenu();
break;
case R.id.bt2:
Intent adam = new Intent(Home.this, BattleScene.class);
startActivity(adam);
Variables.currentMenu = 0;
break;
case R.id.bt3:
break;
}
}发布于 2017-08-01 12:33:04
立即的答案是:您错过了外部交换机的中断。
但是为什么会发生这种情况呢?这就引出了真正的答案:,而不是,甚至试图编写这样的代码吗?
这是对单层抽象原则的严重违反。
其效果是显而易见的:当您关闭编辑器时,这样的代码会使意大利面代码发生变化。你甚至似乎试图改变变量的内容,你要切换到“外部”一边,而“在里面”。心神不宁。以消极的方式。
换句话说:您刚刚开始编写这段代码,但是您无法得到正确的代码。原因是您决定使用复杂的方式来表达您的想法。
长话短说:使用开关进行决策和驱动行为是“过程”编程。OOP处理这些事情的方法是:使用状态机器。而不是请求状态和切换它,调用对象的方法。这些对象可能返回其他可以调用方法的对象。
发布于 2017-08-01 12:32:21
在你的外部switch中有一次失败.正如您在内部switch中所做的那样,您很可能希望在每个case的末尾进行break。
@Override
public void onClick(View view) {
int currentMenu = Variables.currentMenu;
switch (currentMenu) {
case 0:
switch (view.getId()) {
// omitted for readability
}
break; // <-- outer break
case 1:
switch (view.getId()) {
// omitted for readability
}
break; // <-- outer break
}https://stackoverflow.com/questions/45437772
复制相似问题