8、switch语句
1.switch语句:"开关"
- switch是一个条件语句,它计算表达式并将其与可能匹配的列表进行比较,并根据匹配执行代码块。它可以被认为是一种惯用的方式来写多个if else子句。
- switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break。而如果switch没有表达式,它会匹配true
- Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch,但是可以使用fallthrough强制执行后面的case代码。
/**
* @author ly (个人博客:https://www.cnblogs.com/qbbit)
* @date 2023/3/29 19:47
* @tags 喜欢就去努力的争取
*/
package main
import (
"errors"
"fmt"
)
func main() {
// 语法结构
/**
switch var1 {
case: val1:
...
case: val2:
...
default:
...
}
*/
fmt.Println("请输入一个数值:")
var x int
fmt.Scan(&x)
num := x
switch num {
case 1:
fmt.Printf("分支一:num的值为:%d,类型为:%T", num, num)
case 2:
fmt.Printf("分支二:num的值为:%d,类型为:%T", num, num)
default:
fmt.Printf("默认分支:num的值为:%d,类型为:%T", num, num)
}
fmt.Println("main 分支 执行结束......")
// 小案例:模拟计算器
fmt.Println("请输入第一个数:")
var num1 int
fmt.Scan(&num1)
fmt.Println("请输入第二个数:")
var num2 int
fmt.Scan(&num2)
fmt.Println("请选择计算方式(1-4):")
println("1、\t+")
println("2、\t-")
println("3、\t*")
println("4、\t/")
println("5、\t%")
// 定义计算方式
var compute string
var expr int
fmt.Scan(&expr)
switch expr {
case 1:
compute = "+"
case 2:
compute = "-"
case 3:
compute = "*"
case 4:
compute = "/"
case 5:
compute = "%"
}
var result int
switch compute {
case "+":
result = num1 + num2
case "-":
result = num1 - num2
case "*":
result = num1 * num2
case "/":
result = num1 / num2
case "%":
result = num1 % num2
default:
errors.New("出错了~")
}
fmt.Printf("%d \t %s \t %d = %d", num1, compute, num2, result)
}
注意事项:
- 1.switch可以作用在其他类型上,case后的数值必须和switch作用的变量类型一致
- 2.case是无序的
- 3.case后的数值是唯一的(duplicate case 3 in switch)
- 4.default语句是可选的操作
2.一些变形写法
/**
* @author ly (个人博客:https://www.cnblogs.com/qbbit)
* @date 2023/3/29 21:01
* @tags 喜欢就去努力的争取
*/
package main
import "fmt"
func main() {
/**
其他写法1 :省略switch后面的变量
其他写法2 :case后面更多个值
其他写法3 :switch后写一条初始化语句
*/
// 变形一
switch {
case true:
fmt.Println("true")
case false:
fmt.Println("false")
}
/**
成绩:
0-59:E类,不及格
60-69:D类,及格
70-79:C类,中
80-89:B类,良
90-100:A类,优秀
*/
fmt.Println("请输入分数:")
score := 0
fmt.Scan(&score)
switch {
case score >= 0 && score < 60:
fmt.Println("E类,不及格")
case score >= 60 && score < 70:
fmt.Println("D类,及格")
case score >= 70 && score < 80:
fmt.Println("C类,中")
case score >= 80 && score < 90:
fmt.Println("B类,良")
case score >= 90 && score <= 100:
fmt.Println("A类,优秀")
default:
fmt.Println("成绩有误~~~")
}
fmt.Println("-----------------------------")
// 变形二 :多case值匹配
fmt.Println("请输入音标:")
letter := ""
fmt.Scan(&letter)
switch letter {
case "A", "E", "I", "O", "U":
fmt.Println(letter, "是元音")
case "M", "N":
fmt.Println("M或N")
default:
fmt.Println("其他")
}
// 小案例
fmt.Println("请输入年份:")
var year int
fmt.Scan(&year)
fmt.Println("请输入月份:")
var mouth int
fmt.Scan(&mouth)
day := 0
switch mouth {
case 1, 3, 5, 7, 8, 10, 12:
day = 31
case 4, 6, 9, 11:
day = 30
case 2:
if year%100 == 0 || year%4 == 0 && year%100 != 0 {
day = 29
} else {
day = 2812
}
default:
fmt.Println("输入的月份有误")
}
fmt.Println(mouth, "有", day, "天")
// 变形三
switch i := 1; i {
case 1:
fmt.Println("i的值为:", i)
default:
fmt.Println("其他...")
}
// fmt.Println(i) // 注意:作用域问题
}
3.break;fallthrough
break:
- 可以使用在switch中,也可以使用在for循环中强制结束case语句,从而结束switch分支
fallthrough:
- 用于穿透switch当switch中某个case匹配成功之后,就执行该case语句如果遇到fallthrough,那么后面紧邻的case,无需匹配,执行穿透执行。
- fallthrough应该位于某个case的最后一行
/**
* @author ly (个人博客:https://www.cnblogs.com/qbbit)
* @date 2023/3/29 22:06
* @tags 喜欢就去努力的争取
*/
package main
import "fmt"
func main() {
n := 2
switch n {
case 1:
fmt.Println("熊大")
fmt.Println("熊大")
fmt.Println("熊大")
// 强制结束case
break
fmt.Println("熊大")
case 2:
fmt.Println("熊二")
fmt.Println("熊二")
fmt.Println("熊二")
// 紧邻的case穿透,不像java语言中默认是穿透的
fallthrough
case 3:
fmt.Println("光头强")
fmt.Println("光头强")
fallthrough
case 4:
fmt.Println("哈哈哈")
default:
fmt.Println("啥也不是~")
}
}
8、switch语句的更多相关文章
- switch语句的妙用
switch语句的普通用法很简单,如下: var a = 3; switch (a) { case 1: console.log(a); break; case 2: case 3: console. ...
- 106运用SWITCH语句打印星期几的单词
package com.chongrui.test;/*运用SWITCH语句打印星期几的单词 * */ public class TypeConvertion { public static void ...
- 通过goto语句学习if...else、switch语句并简单优化
goto语句在C语言中实现的就是无条件跳转,第二章一上来就介绍goto语句就是要通过goto语句来更加清楚直观的了解控制结构. 我理解的goto语句其实跟switch语句有相似之处,都是进行跳转.不同 ...
- Java中简单的操作(if语句、常用操作符、switch语句、变量赋值等)
---------------------if语句介绍--------------------------------------------------- class IfDemo { public ...
- Switch语句的case穿透
Switch语句的case穿透 一 switch语句几点说明: 1. case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的. 2.case后面表达式可以接受: 基本数据类型,b ...
- ECMA中的switch语句
switch借鉴自其他语言,但也有自己的特色. 1.可以在switch语句中使用任何数据类型(数值.字符串.对象等),很多其他语言中只能使用数值. 2.每个case的值不一定是常量,可以是变量或者表达 ...
- switch语句下的变量声明和定义
switch语句下的变量声明和定义的问题: switch...case...语句中存在声明和定义会出现一些问题.这个由switch语法特性决定的, switch中每个case都是平等的层次,区别于一般 ...
- 透过IL看C#:switch语句(转)
透过IL看C# switch语句(上) 摘要: switch语句是 C#中常用的跳转语句,可以根据一个参数的不同取值执行不同的代码.本文介绍了当向 switch语句中传入不同类型的参数时,编译器为其生 ...
- switch语句
应用条件语句可以很方便地使程序实现分支,但是出现分支比较多的时候,虽然可以用嵌套的if语句来解决,但是程序结构会显得复杂,甚至凌乱.为方便实现多情况选择,C++提供了一种switch开关语句. 一 ...
- java switch语句注意的事项
1.switch语句使用的变量只能是byte.char.short.string数据类型. 2.case后面gender数据必须是一个常量. 3.switch的停止条件: switch语句一旦比配上了 ...
随机推荐
- Jenkins 相关配置
https://www.cnblogs.com/zylyehuo/ 参考链接 解决:Jenkins: signature verification failed in update site 'def ...
- jQuery Ajax执行顺序问题
代码如下: $(document).ready(function () { var res; $.ajax({ type: 'post', url: 'GridDemo.aspx/PlaceOrder ...
- 给你的模糊测试开开窍——定向灰盒模糊测试(Directed Greybox Fuzzing)综述
本文系原创,转载请说明出处 Please Subscribe Wechat Official Account:信安科研人,获取更多的原创安全资讯 原论文:<The Progress, Cha ...
- 《微服务架构设计》——Eventuate Tram框架订阅/消费模式源码解析
Eventuate Tram框架官方文档: https://eventuate.io/docs/manual/eventuate-tram/latest/getting-started-eventua ...
- mysql触发器使用教程-六种触发器
参考:https://zhuanlan.zhihu.com/p/439273702 触发器(Trigger)是 MySQL 中非常实用的一个功能,它可以在操作者对表进行「增删改」 之前(或之后)被触发 ...
- MySQL实战实战系列 03 事务隔离:为什么你改了我还看不见?
提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务.最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱. 转账过程具体到程序里会有一系列的操作,比如 ...
- assembleDebug太慢的问题调查以及其他
Preface 最近在做flutter上的音频和视频方面的探索. 需要用到一些视屏区域截取,视屏导出成序列图等等. 这是昨天晚上到今天早上解决的一些问题的汇总,可能先后顺序之类的会记错: 此文目的用于 ...
- Redis 不同插入方法的性能对比
1. 测试目的 对比 Redis 不同插入方法(插入同时能设置过期时间)的性能区别. 2. 测试数据 key:SMGP_ value:JSON数据 { "spName":" ...
- CF 下分记录
7.27 edu152 \(+173=2048\) B 没细看数据范围 WA 了一次 D 没判 \(i-1=0\) WA 了一次 E. Max to the Right of Min 考虑增大右端点, ...
- Semantic Kernel .NET SDK 的 v1.0.0 Beta1 发布
介绍 Semantic Kernel (SK) 是一个开源的将大型语言模型(LLM)与流行的编程语言相结合的SDK,Microsoft将Semantic Kernel(简称SK)称为轻量级SDK,结合 ...