Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何避免冗长的switch case语句?_Android_Switch Statement - Fatal编程技术网

Android 如何避免冗长的switch case语句?

Android 如何避免冗长的switch case语句?,android,switch-statement,Android,Switch Statement,我目前正在编写一个Android应用程序,用于计算十字路口的交通量。 在4路交叉路口,应用程序将有24个按钮 共有4组,一组用于:东行、南行、西行和北行车辆。 这4组中的每一组分为2组,每组3个按钮,用于卡车和轿车。 然后将这两组车辆分为左转、右转或通过的车辆 在确定按下哪个按钮时,如何避免出现巨大的开关/案例语句 我想做的是: 每次按下按钮时,输出一行内容: 车辆类型、方向、转弯 switch (id) { case R.id.car_westbound_left: L

我目前正在编写一个Android应用程序,用于计算十字路口的交通量。 在4路交叉路口,应用程序将有24个按钮

共有4组,一组用于:东行、南行、西行和北行车辆。 这4组中的每一组分为2组,每组3个按钮,用于卡车和轿车。 然后将这两组车辆分为左转、右转或通过的车辆

在确定按下哪个按钮时,如何避免出现巨大的开关/案例语句

我想做的是:

每次按下按钮时,输出一行内容: 车辆类型、方向、转弯

switch (id) {
    case R.id.car_westbound_left:
        Log.v("output", "car,westbound,left");
        break;
}
等等等等

现在,我认为这不是很好的代码。
我可以创建一个类“按钮”,带有属性:车辆类型、方向、转弯,然后以某种方式使用它吗?但我仍然需要按钮的ID来确定按下了哪个按钮

一个字符串数组怎么样,其中id是数组的索引。所以你得到了线

Log.v(“输出”,myoutputstrings[id])


您只需要以某种方式初始化它,可能从文件或数据库中读取它。

您可以将按钮的Tag属性(
android:Tag
XML属性)设置为“car,westbound,left”,并使用getTag()方法检索它。

有许多设计可以从一个长“
开关中分解24个案例去别的地方。常见的“OO”方法是集中在某种工厂中,或者让24个“独立的参与者”有权做你想做的事情

例如,如果您创建的24个按钮在按下时仅回显其日志语句,则将消除该开关。如果您有额外的处理(除了日志记录),那么您需要做出战略决策,以“集中”该处理(如您现在使用的单个大型switch语句),或“分散”该处理到“独立参与者”(如24个“智能按钮”)中,这些参与者在按下时有上下文和权限执行您想要的操作

然后,“分散”设计就可以成熟了:您可能有一个“DoIt”对象/按钮,状态是日志消息,您只实例化了其中的24个实例(但只有一个类)。即使24个实例要做完全不同的事情,您也可以在其他设计中进一步抽象它们,比如实例化引用24个不同
MyOperation1
MyOperation2
MyOperation3
。。。类实例


IMHO,关键的设计决策是:你想集中什么?如果它们都做几乎相同的事情,那么您需要一个类,包含24个实例。如果它们的行为根本不同(在
开关
中的每个
case
语句中都有非常不同的逻辑),那么您可能会从一个或几个处理类中受益,这些处理类可能共享一个公共基类,然后实例化24个按钮,每个按钮引用其处理类实例。

,但是我的int com.example.helloandroid.R.id.car\u westbound\u left=2131034119如何将其用作数组中的索引?编辑:啊,我想这就是初始化它的部分,对吗?映射或哈希映射可能就是你想要的。哇-你是如何实现你的按钮的?你能发布布局图吗?如果您使用的是现有的Button类,那么可以只使用click侦听器吗。。可以改用长if-else语句;-)您可能希望使用车辆对象和放置车辆的某种交叉口类。4路交叉口创建了4个车辆对象或类似的SMT。@Nathan这是我现在拥有的和一个按钮。首先,非常感谢您的回答。我所有的按钮基本上都做相同的事情,它们必须输出car或truck以及west/east/north/south和left/right/through。当然,这取决于按下哪个按钮。我应该将按钮分散到按钮组中吗?每个“卡车”按钮?还是每个“西部”按钮?这在这里有用吗?或者,我不可避免地要用手写的方式编写这24个场景,比如编写一个
MyButton
类,该类将字符串输出为:
newmybutton(“car”、“eastbund”、“left”)
,或者
newmybutton(“car,eastbund,left”)
,然后将其实例化24次,按钮本身执行
日志()
当按下按钮时,使用其字符串。然后,开关不见了。