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语句一旦比配上了 ...
随机推荐
- svg动画 - 波浪动画
波浪 <path d="M 96.1271 806.2501 C 96.1271 806.2501 241.441 755.7685 384.5859 755.7685 C 529.8 ...
- Jquery tableExport.js将网页中的表格导出为Excel
需求:将如下网页中的所有表格一次导入到Excel文件中. 方法:使用jQuery的tableExport.js插件,可以将网页中指定的table表格数据导出到Excel文件,而不需要经过后台. 操作步 ...
- 开源.NetCore通用工具库Xmtool使用连载 - 图形验证码篇
[Github源码] <上一篇> 介绍了Xmtool工具库中的Web操作类库,今天我们继续为大家介绍其中的图形验证码类库. 图形验证码是为了抵御恶意攻击出现的一种设计:例如用户登录.修改密 ...
- 从Google开发者大会浅谈LLM的应用
这周参加了在上海世博中心举办Google I/O Connect中国开发者大会,有几年没参加这么高质量的活动,有点感慨. 期间重点听了关于GCP和Google AI大语言模型的主题演讲,发现目前各大厂 ...
- HTML一键打包APK工具最新版1.9.1更新(附下载地址)
HMTL网址打包APK,可以把本地HTML项目, Egret游戏,网页游戏,或者网站打包为一个安卓应用APK文件,无需编写任何代码,也无需配置安卓开发环境,支持在最新的安卓设备上安装运行. HTML一 ...
- 6-MySQL查询条件
在MySQL中,高级查询是指使用更复杂的查询语句和操作符来检索和操作数据库中的数据.高级查询可以帮助您更精确地找到所需的信息,并提高查询的效率和灵活性. 以下是高级查询的一些常见应用场景和意义: 连接 ...
- Solution -「CSP 2019」Centroid
Description Link. 给定一棵 \(n\) 个点的树,设 \(E\) 为边集,\(V'_x,\ V'_y\) 分别为删去边 \((x,y)\) 后 点 \(x\) 所在的树的点集和点 \ ...
- Django-rest-framework框架——Web应用模式、API接口、接口测试工具(Postman)、RESTfulAPI规范、序列化、drf、环境安装与配置、CBV源码分析、 APIView
@ 目录 一 Web应用模式 1.1 前后端不分离 1.2 前后端分离 二 API接口 三 接口测试工具:Postman 四 RESTful API规范(背诵牢记) 4.1 数据的安全保障 4.2 接 ...
- 14.1 Socket 套接字编程入门
Winsock是Windows操作系统上的套接字API,用于在网络上进行数据通信.套接字通信是一种允许应用程序在计算机网络上进行实时数据交换的技术.通过使用Windows提供的API,应用程序可以创建 ...
- 使用 Java 对比两个PDF文档之间的差异
不论是在团队写作还是在个人工作中,PDF 文档往往会经过多次修订和更新.掌握 PDF 文档内容的变化对于管理文档有极大的帮助.通过对比 PDF 文档,用户可以快速找出文档增加.删除和修改的内容,更好地 ...