在本文中,我们将为您详细介绍对一个switchcase语句使用两个值的相关知识,并且为您解答关于在switch语句中多个case可以共用一组执行语句的疑问,此外,我们还会提供一些关于3.3switch
在本文中,我们将为您详细介绍对一个switch case语句使用两个值的相关知识,并且为您解答关于在switch语句中多个case可以共用一组执行语句的疑问,此外,我们还会提供一些关于3.3 switch-case语句的实例解析 [Swift原创教程]、C#如何使用键值对取代Switch...Case语句的示例、C/C++ switch,case语句支持字符串扩展、c语言switch case语句怎么用的有用信息。
本文目录一览:- 对一个switch case语句使用两个值(在switch语句中多个case可以共用一组执行语句)
- 3.3 switch-case语句的实例解析 [Swift原创教程]
- C#如何使用键值对取代Switch...Case语句的示例
- C/C++ switch,case语句支持字符串扩展
- c语言switch case语句怎么用
对一个switch case语句使用两个值(在switch语句中多个case可以共用一组执行语句)
在我的代码中,该程序根据用户输入的文本执行某些操作。我的代码如下:
switch (name) { case text1: { //blah break; } case text2: { //blah break; } case text3: { //blah break; } case text4: { //blah break; }
但是,案例text1
和内部的代码text4
是相同的。因此,我想知道我是否有可能实施类似
case text1||text4: { //blah break; }
我知道||
运算符在case语句中不起作用,但是有什么我可以使用的东西。
答案1
小编典典您可以使用具有以下两个CASE
语句。
case text1: case text4:{ //blah break; }
请参见此示例:该代码示例计算特定月份中的天数:
class SwitchDemo { public static void main(String[] args) { int month = 2; int year = 2000; int numDays = 0; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: numDays = 31; break; case 4: case 6: case 9: case 11: numDays = 30; break; case 2: if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0)) numDays = 29; else numDays = 28; break; default: System.out.println("Invalid month."); break; } System.out.println("Number of Days = " + numDays); }}
这是代码的输出:
Number of Days = 29
贯穿:
另一个兴趣点是中断声明。每个break语句终止封闭的switch语句。控制流从切换块后的第一条语句继续。break语句是必需的,因为如果没有它们,则是switch块中的
fallthrough
语句:匹配case标签之后的所有语句将按顺序执行,而不管后续case标签的表达式如何,直到遇到break语句为止。
示例代码:
public class SwitchFallThrough { public static void main(String[] args) { java.util.ArrayList<String> futureMonths = new java.util.ArrayList<String>(); int month = 8; switch (month) { case 1: futureMonths.add("January"); case 2: futureMonths.add("February"); case 3: futureMonths.add("March"); case 4: futureMonths.add("April"); case 5: futureMonths.add("May"); case 6: futureMonths.add("June"); case 7: futureMonths.add("July"); case 8: futureMonths.add("August"); case 9: futureMonths.add("September"); case 10: futureMonths.add("October"); case 11: futureMonths.add("November"); case 12: futureMonths.add("December"); default: break; } if (futureMonths.isEmpty()) { System.out.println("Invalid month number"); } else { for (String monthName : futureMonths) { System.out.println(monthName); } } }}
这是代码的输出:
AugustSeptemberOctoberNovemberDecember
在switch语句中使用字符串
在Java SE 7和更高版本中,可以在switch语句的表达式中使用String对象。以下代码示例,基于名为month的字符串的值显示月份数:
public class StringSwitchDemo { public static int getMonthNumber(String month) { int monthNumber = 0; if (month == null) { return monthNumber; } switch (month.toLowerCase()) { case "january": monthNumber = 1; break; case "february": monthNumber = 2; break; case "march": monthNumber = 3; break; case "april": monthNumber = 4; break; case "may": monthNumber = 5; break; case "june": monthNumber = 6; break; case "july": monthNumber = 7; break; case "august": monthNumber = 8; break; case "september": monthNumber = 9; break; case "october": monthNumber = 10; break; case "november": monthNumber = 11; break; case "december": monthNumber = 12; break; default: monthNumber = 0; break; } return monthNumber; } public static void main(String[] args) { String month = "August"; int returnedMonthNumber = StringSwitchDemo.getMonthNumber(month); if (returnedMonthNumber == 0) { System.out.println("Invalid month"); } else { System.out.println(returnedMonthNumber); } }}
该代码的输出为8。
从Java文档
3.3 switch-case语句的实例解析 [Swift原创教程]
原文:http://coolketang.com/staticCoding/5a9924e275657179576723bb.html
1. 使用switch条件语句,可以测试一个变量等于多个值时的情况。只要匹配到 case 语句,则整个条件语句执行完成。
2. 首先定义一个整型常量,作为当前时间的小时数。
3. 接着定义一个字符串变量,根据不同的小时数,给该字符串变量,设置不同的内容。
4. 使用switch关键词,创建一个条件语句,从而根据不同的时间,进行不同的处理。
5. 使用case关键词,进行条件的匹配。 当小时数为7时,设置提示信息的内容为:现在是起床时间。
6. 当小时数为8或12或18时,设置提示信息的内容为:现在是用餐时间。
7. 使用let和where语句,可以对时间的值进行区间判断,如果值在19和24之间,则设置信息的内容为:晚间娱乐时间。
8. 配合封闭区间标识符,可以对时间进行区间判断,当值在1至6之间时,设置信息的内容为:休息时间。此时系统提示错误,点击错误图标查看错误信息。
9. 系统提示条件语句需要添加默认条件,点击修复按钮,添加缺失的默认条件。
10. 此时添加了一个默认条件,接着编写该条件下的代码。
11. 设置默认条件下的信息内容。
12. 你可以修改几次小时数的值,根据不同的小时数,右侧的实时反馈区,将显示不同的内容。
C#如何使用键值对取代Switch...Case语句的示例
swich....case 条件分支多了之后,会严重的破坏程序的美观性。
比如这个
上述代码是用于两个进程之间通信的代码,由于通信的枚举特别的多,所以case的分支特别的多。导致了代码的可读性,可维护性严重下降。经过查找资料和重构,想到了一种可行的在这种情况替代switch...case的方案——————利用键值对。
声明键值对对象
针对进程通信的代码逻辑,构建了如下的键值对。
Dictionary<EnumMsg, Action<Message>> mMessageReceiver = new Dictionary<EnumMsg, Action<Message>>();
这个键值对的键是自定义的消息枚举,值是Action
初始化时注册消息
在初始化时,将枚举与相应的Action进行装载。
private void SubscribeMessageReceiver() { mMessageReceiver.Add(EnumMsg.SEND_PANO_PARAM, UpdatePano); mMessageReceiver.Add(EnumMsg.CMD_PANO_VIEW, ExecutePanoViewCommand); mMessageReceiver.Add(EnumMsg.CMD_PANO_LENGTH_MEASURE, ExecuteLengthMeasure); mMessageReceiver.Add(EnumMsg.CMD_PANO_AREA_MEASURE, ExecuteAreaMeasure); mMessageReceiver.Add(EnumMsg.CMD_PANO_QUICK_PICK, ExecuteQickPickCommand); }
这样就把键值对对象构建完成。那么就可以将重构swith...case代码段了。
修改switch...case代码段
重构前的switch....case代码
protected override void DefWndProc(ref Message m) { switch (m.Msg) { case ((int)API.WM_COPYDATA): { switch ((int)m.WParam) { case ((int)Procedure.OpenSkyline): m = OpenSkylineView(m); break; case ((int)Procedure.Measureare): m = Measure(m); break; case ((int)Procedure.Measurelength): m = Measure(m); break; } } break; default: break; } base.DefWndProc(ref m); }
基于键值对来查找对应的处理方法的代码
protected override void DefWndProc(ref Message m) { base.DefWndProc(ref m); if (m.Msg == (int)API.WM_COPYDATA) { EnumPanoMsg pEnumPanoMsg = (EnumPanoMsg)m.WParam; if (mMessageReceiver.Keys.Contains(pEnumPanoMsg)) { mMessageReceiver[pEnumPanoMsg](m); } } }
根据键值对的键来进行查找,当需要增加新的case分支的时候,原本的方法需要更改switch....case分支,但是利用键值对的方法,只需要编写新的处理方法,并且在键值对中增加新的一对键值就可以了。代码简洁美观,没有一长串令人厌烦的case了。
以上就是C#如何使用键值对取代Switch...Case语句的示例的详细内容,更多请关注php中文网其它相关文章!
C/C++ switch,case语句支持字符串扩展
SSE(switch 字符串类型扩展)
在java中switch,case可以传入字符串,而在C/C++中并不支持,这种情况下我们只能逐个进行字符串比较造成性能底下,或者我们先计算字符串的hash值,再用switch,case语句,但这种写法的代码根本没法维护。
在该项目中可以使用类似switch,case的写法来完成字符串的hash计算,如下:
#include "test_sse_gen.inl" //该文件由sse_gen生成
int toWeekDay(const char* str){
SSE_SWITCH(str){
SSE_CASE(Monday):
return 1;
SSE_CASE(Tuesday):
return 2;
SSE_CASE(Wednesday):
return 3;
SSE_CASE(Thursday):
return 4;
SSE_CASE(Friday):
return 5;
SSE_CASE(Saturday):
return 6;
SSE_CASE(Sunday):
return 7;
default:
return 0;
}
}
生成的test_sse_gen.inl文件内容如下:
#pragma once
#include "sse/sse_str.h"
/*this file is generated by sse_gen don''t edit it*/
enum{
_SSE_SEED_ = 216613626,
SSE_Friday = 38901535,
SSE_Monday = 237465482,
SSE_Saturday = 247288607,
SSE_Sunday = 214038502,
SSE_Thursday = 139529568,
SSE_Tuesday = 25959271,
SSE_Wednesday = 38823350,
};
在上面的示例中每次调用toWeekDay都会计算字符串hash值,我们可以使用sse_str_t类型的参数,并将SSE_SWITCH改为SSE_SWITCH_SS,这样我们只需要计算一次hash即可。
性能测试:
运行1亿次的字符串转数字函数
- 使用SSE_SWITCH 耗时890毫秒。
- 使用SSE_SWITCH_SS 耗时375毫秒。
- 使用if语句耗时 1672毫秒。
代码地址
c语言switch case语句怎么用
C语言提供了一种用于多分支选择的switch语句, 其一般形式为:
switch(表达式){ case 常量表达式1: 语句1; case 常量表达式2: 语句2; … case 常量表达式n: 语句n; default: 语句n+1; }
其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
推荐学习:c语言视频教程
例子:
立即学习“C语言免费学习笔记(深入)”;
#include <stdio.h> int main(void){ int a; printf("input integer number: "); scanf("%d",&a); switch (a){ case 1:printf("Monday\n"); break; case 2:printf("Tuesday\n"); break; case 3:printf("Wednesday\n"); break; case 4:printf("Thursday\n"); break; case 5:printf("Friday\n"); break; case 6:printf("Saturday\n"); break; case 7:printf("Sunday\n"); break; default:printf("error\n"); } return 0; }
程序解读:
本程序是要求输入一个数字,输出它对应的星期的英文单词。
注意项:
1、在case后的各常量表达式的值不能相同,否则会出现错误。
2、在case后,允许有多个语句,可以不用{}括起来。
3、各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
4、default子句可以省略不写。
PHP中文网,大量编程学习课程,欢迎学习!
以上就是
关于对一个switch case语句使用两个值和在switch语句中多个case可以共用一组执行语句的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于3.3 switch-case语句的实例解析 [Swift原创教程]、C#如何使用键值对取代Switch...Case语句的示例、C/C++ switch,case语句支持字符串扩展、c语言switch case语句怎么用等相关知识的信息别忘了在本站进行查找喔。
本文标签: