GVKun编程网logo

对一个switch case语句使用两个值(在switch语句中多个case可以共用一组执行语句)

16

在本文中,我们将为您详细介绍对一个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可以共用一组执行语句)

对一个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原创教程]

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. 你可以修改几次小时数的值,根据不同的小时数,右侧的实时反馈区,将显示不同的内容。
本文整理自:《Swift4互动教程》,真正的 [手把手]教学模式,用最快的速度上手iOS开发和Swift语言,苹果商店App Store免费下载: https://itunes.apple.com/cn/app/id1320746678 ,或扫描本页底部的二维码。课程配套素材下载地址: 资料下载

C#如何使用键值对取代Switch...Case语句的示例

C#如何使用键值对取代Switch...Case语句的示例

swich....case 条件分支多了之后,会严重的破坏程序的美观性。
比如这个
C#如何使用键值对取代Switch...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语句支持字符串扩展

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亿次的字符串转数字函数

  1. 使用SSE_SWITCH 耗时890毫秒。
  2. 使用SSE_SWITCH_SS 耗时375毫秒。
  3. 使用if语句耗时 1672毫秒。

代码地址

c语言switch case语句怎么用

c语言switch case语句怎么用

c语言switch case语句怎么用

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中文网,大量编程学习课程,欢迎学习!

以上就是c语言switch case语句怎么用的详细内容,更多请关注php中文网其它相关文章!

关于对一个switch case语句使用两个值在switch语句中多个case可以共用一组执行语句的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于3.3 switch-case语句的实例解析 [Swift原创教程]、C#如何使用键值对取代Switch...Case语句的示例、C/C++ switch,case语句支持字符串扩展、c语言switch case语句怎么用等相关知识的信息别忘了在本站进行查找喔。

本文标签: