关于switch,你需要知道的所有

发布时间 2024-01-01 15:52:39作者: worker2011

话说写代码时要写 \(1\)\(\text{if}\) 的题你们有木有遇到?

比如这道题\(6\) 个操作要写 \(6\)\(\text{if}\)!那么你的代码可能会成这德行:

if (op == 1) {
	// 一顿操作猛如虎

} else {

	if (op == 2) {
		// 一顿操作猛如虎
	} else {
		if (op == 3) {
			// 一顿操作猛如虎
		} else {
			if (op == 4) {
				// 一顿操作猛如虎
			} else {
				if (op == 5) {
					// 一顿操作猛如虎
				} else {
					//一顿操作猛如虎
				}

			}

		}


	}
}

坑*啊!一个这写 \(20\) 多行……

于是,人们发明了这个东西:\(\text{switch}\)

\(\text{switch}\) 这玩意儿需要你给它 \(1\) 个数,它会自己判断。

格式大概是这样:

switch (op) {
	case 1 :  /*一顿操作猛如虎*/ break;
	case 2 :  /*一顿操作猛如虎*/ break;
	case 3 :  /*一顿操作猛如虎*/ break;
	case 4 :  /*一顿操作猛如虎*/ break;
	case 5 :  /*一顿操作猛如虎*/ break;
	case 6 :  /*一顿操作猛如虎*/ break;
	......
	case 10086: /*一顿操作猛如虎*/ break;
	default : /*一顿操作猛如虎*/
}

咱来解读一下这货咋跑的:

先进去,\(\text{op}\) 是几就进哪个 \(\text{case}\)(与位置无关),执行里面的操作。注意\(\text{case}\) 语句后面的操作无论有几个语句都不用像 \(\text{if}\) 或循环那样写个花括号括起来。最后,如果你认为到此为止了,那么写个“\(\text{break}\)”结束。如果你不写“\(\text{break}\)”,那么它会自动执行下一个语句(可以是 \(\text{case}\),也可以是 \(\text{default}\)

如果哪个 \(\text{case}\) 都不对应呢?那么这个时候就进了 \(\text{default}\)\(\text{default}\) 已经是默认一波操作了,不需要 \(\text{break}\) 了。

明白了不?

那么用 \(\text{switch}\) 语句改写上面那段代码就会变成这德行:

switch (op) {
	case 1 :  /*一顿操作猛如虎*/ break;
	case 2 :  /*一顿操作猛如虎*/ break;
	case 3 :  /*一顿操作猛如虎*/ break;
	case 4 :  /*一顿操作猛如虎*/ break;
	case 5 :  /*一顿操作猛如虎*/ break;
	case 6 :  /*一顿操作猛如虎*/ break;
}

是不是清爽了好多?


\(\text{Q}\) & \(\text{A}\):

  1. \(\text{case}\) 里的 \(\text{break;}\) 还能结束循环吗?

    不能,只能结束该 \(\text{switch}\) 语句。

  2. 你最后的那段代码没有 \(\text{default}\) 哎……

    这货本来就是默认操作,可写可不写。就像你也写过\(1\)吨不带 \(\text{else}\)\(\text{if}\) 一样……

  3. \(\text{default}\) 只能写在最后嘛?

    你爱写哪儿写哪儿,反正能走 \(\text{case}\) 的都先走 \(\text{case}\) 了。只不过一般会写在最后。

  4. \(\text{switch (op)}\) 中的 \(\text{op}\) 可以是哪几种类型呢?

    一般都是整数,有时也会用 \(\text{char}\)。但你千万别用浮点数(浮点数都敢枚举,疯了?这得枚举到猴年马月去……为了给你续命,正常的编译器都会直接CE)。

  5. \(\text{case}\)里的东西只能写在 \(1\) 行里弄得我码风都乱了……

    不是,这 \(\text{TM}\) 谁告诉你只能写在 \(1\) 行里的?你要是愿意可以写 \(\text{10086w}\) 行,反正都不用加花括号。写在 \(1\) 行里只是为了方便阅读……

  6. 能嵌套吗?

    当然可以,\(switch=\) 特殊的 \(\text{if}\) 语句,你 \(\text{if}\) 能嵌套 \(\text{switch}\) 咋就不行了?