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语句的更多相关文章

  1. switch语句的妙用

    switch语句的普通用法很简单,如下: var a = 3; switch (a) { case 1: console.log(a); break; case 2: case 3: console. ...

  2. 106运用SWITCH语句打印星期几的单词

    package com.chongrui.test;/*运用SWITCH语句打印星期几的单词 * */ public class TypeConvertion { public static void ...

  3. 通过goto语句学习if...else、switch语句并简单优化

    goto语句在C语言中实现的就是无条件跳转,第二章一上来就介绍goto语句就是要通过goto语句来更加清楚直观的了解控制结构. 我理解的goto语句其实跟switch语句有相似之处,都是进行跳转.不同 ...

  4. Java中简单的操作(if语句、常用操作符、switch语句、变量赋值等)

    ---------------------if语句介绍--------------------------------------------------- class IfDemo { public ...

  5. Switch语句的case穿透

    Switch语句的case穿透 一 switch语句几点说明: 1. case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的. 2.case后面表达式可以接受: 基本数据类型,b ...

  6. ECMA中的switch语句

    switch借鉴自其他语言,但也有自己的特色. 1.可以在switch语句中使用任何数据类型(数值.字符串.对象等),很多其他语言中只能使用数值. 2.每个case的值不一定是常量,可以是变量或者表达 ...

  7. switch语句下的变量声明和定义

    switch语句下的变量声明和定义的问题: switch...case...语句中存在声明和定义会出现一些问题.这个由switch语法特性决定的, switch中每个case都是平等的层次,区别于一般 ...

  8. 透过IL看C#:switch语句(转)

    透过IL看C# switch语句(上) 摘要: switch语句是 C#中常用的跳转语句,可以根据一个参数的不同取值执行不同的代码.本文介绍了当向 switch语句中传入不同类型的参数时,编译器为其生 ...

  9. switch语句

    应用条件语句可以很方便地使程序实现分支,但是出现分支比较多的时候,虽然可以用嵌套的if语句来解决,但是程序结构会显得复杂,甚至凌乱.为方便实现多情况选择,C++提供了一种switch开关语句.   一 ...

  10. java switch语句注意的事项

    1.switch语句使用的变量只能是byte.char.short.string数据类型. 2.case后面gender数据必须是一个常量. 3.switch的停止条件: switch语句一旦比配上了 ...

随机推荐

  1. 纯分享:将MySql的建表DDL转为PostgreSql的DDL

    背景 现在信创是搞得如火如荼,在这个浪潮下,数据库也是从之前熟悉的Mysql换到了某国产数据库. 该数据库我倒是想吐槽吐槽,它是基于Postgre 9.x的基础上改的,至于改了啥,我也没去详细了解,当 ...

  2. 【译】IntelliJ IDEA 2023.2 最新变化——JetBrains IDE 中的 AI 助手

    前言 本周所有基于 IntelliJ 的 IDE 和 .NET 工具的 EAP 版本都包含一个主要新功能:AI Assistant.本博文重点介绍我们基于 IntelliJ 的 IDE,并且即将推出专 ...

  3. 现代 CSS 解决方案:原生嵌套(Nesting)

    很早之前,就写过一篇与原生嵌套相关的文章 -- CSS 即将支持嵌套,SASS/LESS 等预处理器已无用武之地?,彼时 CSS 原生嵌套还处于工作草案 Working Draft (WD) 阶段,而 ...

  4. 「sdoi2019 - D2T2」移动金币

    对 @command_block 没有 implementation 做法的细化.理论来说可以通过,但因为我实现得较劣无法通过.:( 把金币中的空隙看作石子,就是一个阶梯 Nim 的模型(有总共 \( ...

  5. 若依框架的startPage( )函数怎么自动关联查询SQL语句?

    Question Description 使用JAVA语言的若依框架的时候,发现只要使用了startPage()函数, 并不需要前端传递分页的数据,也不需要注解,就能完成分页功能.预判他应该是使用类似 ...

  6. ElasticSearch系列——查询、Python使用、Django/Flask集成、集群搭建,数据分片、位置坐标实现附近的人搜索

    @ 目录 Elasticsearch之-查询 一 基本查询 1.1 match查询 1.2 term查询 1.3 terms查询 1.4 控制查询的返回数量(分页) 1.5 match_all 查询 ...

  7. 2020 5 17 codeforces

    cf还没结束,就开始写总结了.cf确实是个好东西,能够直接暴露出弱点和增加刷题量.以后还是要多打打的.这次我发现自己的码力还是不行.一个二分都要调好久.唉T1sb题,就是入门用的.题目看不懂...写了 ...

  8. 轻松掌握组件启动之Redis集群扩展秘籍:轻松扩容与缩容,释放高性能潜能

    扩展集群操作 扩容 在我们原始的集群基础上,我们决定增加一台主节点(8007)和一台从节点(8008),这样新增的节点将会在下图中以虚线框的形式显示在集群中. 1: 首先,在 /usr/local/r ...

  9. js数据结构--字典

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...

  10. Redis 6 学习笔记 3 —— 用SpringBoot整合Redis的踩坑,了解事务、乐观锁、悲观锁

    SpringBoot整合Redis时踩到的坑 jdk1.8环境,用idea的Spring Initializr创建spring boot项目,版本我选的2.7.6.pom文件添加的依赖如下,仅供参考. ...