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语句一旦比配上了 ...
随机推荐
- 淘宝商品详情 API的使用说明
淘宝平台提供了 API 接口可以用于获取淘宝商品详情信息.通过 API 接口,我们可以获取到商品的基本信息.价格.评论及评价等详细信息.以下是使用说明: 获取淘宝API账号 在获取淘宝商品详情 API ...
- Linq关联两个DataTable合并为一个DataTable
DataSet ds ; DataTable dt1= ds.Tables[0]; DataTable dt2= ds.Tables[1]; //关联 var res = from m in dt1. ...
- ATtiny88初体验(六):SPI
ATtiny88初体验(六):SPI SPI介绍 ATtiny88自带SPI模块,可以实现数据的全双工三线同步传输.它支持主从两种模式,可以配置为LSB或者MSB优先传输,有7种可编程速率,支持从空闲 ...
- 推荐一个react上拉加载更多插件:react-infinite-scroller
在开发网页和移动应用时,经常需要处理大量数据的展示和加载.如果数据量非常大,一次性全部加载可能会导致页面卡顿或崩溃.为了解决这个问题,我们可以使用无限滚动(Infinite Scroll)的技术.Re ...
- 使用Triton部署chatglm2-6b模型
一.技术介绍 NVIDIA Triton Inference Server是一个针对CPU和GPU进行优化的云端和推理的解决方案. 支持的模型类型包括TensorRT.TensorFlow.PyTor ...
- 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(8) -- 使用Converter类实现内容的转义处理
在我们WPF应用端的时候,和WInform开发或者Vue前端开发一样,有时候也需要对内容进行转义处理,如把一些0,1数值转换为具体含义的文本信息,或者把一些布尔变量转换为是否等,都是常见的转换处理,本 ...
- jq工具及其常用用法
近来在工作中处理JSON处理较多,深入研究了一下jq,之前对jq的使用一直停留在JSON数据格式化的层面,实际它的能力远不止于此. 在处理JSON数据时,我们经常需要在命令行中进行过滤.查询和编辑的操 ...
- 探索CPU的黑盒子:解密指令执行的秘密
引言 在我们之前的章节中,我们着重讲解了CPU内部的处理过程,以及与之密切相关的数据总线知识.在这个基础上,我们今天将继续深入探讨CPU执行指令的相关知识,这对于我们理解计算机的工作原理至关重要. C ...
- 虹科分享 | B站崩了怎么办?Redis企业版数据库多云战略分析
近日,拥有3.33亿月均活用户的中国最大青年社区-B站因大规模服务器宕机,再度喜提热搜.对于B站这样需要满足大量用户在同一时间进行访问并实现各种功能的大型平台,其后台架构是十分复杂和庞大的.本地服务器 ...
- 什么是Kubernetes
什么是Kubernetes Kubernetes 概述 1.K8S 是什么? K8S 的全称为 Kubernetes (K12345678S),PS:"嘛,写全称也太累了吧,不如整个缩写&q ...