首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开关中的开关

开关中的开关
EN

Stack Overflow用户
提问于 2017-08-01 12:26:45
回答 2查看 89关注 0票数 1

我想有一个开关,以记忆的菜单,我目前在其中,然后检查哪个按钮按下,以便它可以引导我到另一个活动。

目前,我已经想出了这个问题,但由于某种原因,在调试第二个案例时,甚至还没有达到case R.id.bt1

我已经输入了变量类:public static int currentMenu = 0;,但是当我将其设置为1时,调试器就会变得很奇怪。

有人能猜出我做错了什么吗?

代码语言:javascript
复制
@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;
            }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-01 12:33:04

立即的答案是:您错过了外部交换机的中断

但是为什么会发生这种情况呢?这就引出了真正的答案:,而不是,甚至试图编写这样的代码吗?

这是对单层抽象原则的严重违反。

其效果是显而易见的:当您关闭编辑器时,这样的代码会使意大利面代码发生变化。你甚至似乎试图改变变量的内容,你要切换到“外部”一边,而“在里面”。心神不宁。以消极的方式。

换句话说:您刚刚开始编写这段代码,但是您无法得到正确的代码。原因是您决定使用复杂的方式来表达您的想法。

长话短说:使用开关进行决策和驱动行为是“过程”编程。OOP处理这些事情的方法是:使用状态机器。而不是请求状态和切换它,调用对象的方法。这些对象可能返回其他可以调用方法的对象。

票数 3
EN

Stack Overflow用户

发布于 2017-08-01 12:32:21

在你的外部switch中有一次失败.正如您在内部switch中所做的那样,您很可能希望在每个case的末尾进行break

代码语言:javascript
复制
@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
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45437772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档