开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 12 天,点击查看活动详情
Go语言的循环结构没那么复杂,只有一个for循环结构,没有while和do-while。
1. for循环基本结构
基本语法如下:
for 初始化变量 ; 判断条件 ; 修正变量 {
代码段(循环体)
}
- 初始化变量:对一个变量进行初始化,以记录循环次数
- 判断条件:看条件是否成立,如果成立进入花括号{},执行循环体一次;不成立则循环结束
- 修正变量:改变变量的值,再去执行判断条件,看是否条件是否还成立,如果符合,再去执行循环体一次
具体执行流程如下图:① -> ② -> ④ -> ③ -> ② -> ④ -> ③...直到②不成立为止
练习:用for循环打印0-9
func main() {
for i := 0; i < 10; i++ {
fmt.Println(i)
}
}
注意这里的i只在for结构里有用,出了结构就不能再使用了
练习:求1-100数字之和
func main() {
sum := 0
for i := 1; i <= 100; i++ {
sum += i
}
fmt.Println(sum)
}
练习:求1-100的偶数和
func main() {
sum := 0
for i := 1; i <= 100; i++ {
if i%2 == 0 {
sum += i
}
}
fmt.Println(sum)
}
2. break语句
有时候使用循环结构时,即使条件满足,我也想强制跳出结束整个循环,这时候就要用到break关键字。
break作用:结束当前循环,后面的代码也不会再执行
比如本来我要打印0-9这些数,现在我突然改想法,打印到3(不算3这个数)就不打印了,除了可以更改条件判断语句外,我们就可以引用break关键字。具体如下:
func main() {
for i := 0; i < 10; i++ {
if i == 3 {
break
}
fmt.Println(i)
}
}
break常用在无法判断for要循环多少次的情况。可以看下面的案例进行理解。
案例:用户名和密码
题目:要求用户输入用户名和密码,只要不是用户名为admin,密码为888888,就一直让用户重新输入
解析:我们无法判断用户到底要输入多少次才能输入正确,这时候我们就要用到死循环和break。
死循环:就是一直循环,无法终止。只能用break跳出。就是for后面直接跟{},{}里加循环体代码
func main() {
var userName string
var userPwd string
for {
fmt.Println("请输入用户名:")
fmt.Scan(&userName)
fmt.Println("请输入密码:")
fmt.Scan(&userPwd)
//对用户名和密码进行判断
if userName == "admin" && userPwd == "888888" {
fmt.Println("输入正确")
break //正确就跳出结束循环
} else {
fmt.Println("输入的用户名或密码错误,请重新输入")
}
}
}
现在我改一下题目:如果用户输入错误次数超过三次(即第三次还输入错误),就提示“输入错误信息次数太多”,并结束整个程序。
func main() {
var userName string
var userPwd string
var count int //记录用户输错的次数
for {
fmt.Println("请输入用户名:")
fmt.Scan(&userName)
fmt.Println("请输入密码:")
fmt.Scan(&userPwd)
//对用户名和密码进行判断
if userName == "admin" && userPwd == "888888" {
fmt.Println("输入正确")
break
} else {
count++
if count >= 3 {
fmt.Println("输入错误信息次数太多")
break
}
fmt.Println("输入的用户名或密码错误,请重新输入")
}
}
}
3. continue语句
continue作用:结束本轮循环,然后进行循环条件的判断,如果成立则进行下一轮循环,否则退出循环。
注意continue是结束的本轮循环,会继续进行条件判断;而break是跳出结束整个循环,不会再进行条件判断。
比如我要用continue实现:输入1-5这几个数字,而3除外。
func main() {
for i := 1; i <= 5; i++ {
if i == 3 {
continue
}
fmt.Println(i)
}
}
4. 循环嵌套
循环体里有循环结构就是循环嵌套
比如一个人一天吃三顿饭,每次吃饭时要说“我要吃饭”,并重复说三天。
func main() {
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
fmt.Println("我要吃饭")
}
}
}
再比如我要输出一个矩形,一行有5个*,共5行。
func main() {
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++ {
fmt.Print("*")
}
fmt.Println()
}
}
5. 循环综合练习
练习:计算营业额
题目:2006年营业额80000元,每年增长25%,请问按此增长速度,到哪一年营业额将达到20万元?
func main() {
year := 2006
var money float64
for money = 80000; money <= 200000; money *= 1.25 {
year++
}
fmt.Println(year)
}
练习:水仙花数
题目:找出100-999间的水仙花数
水仙花数:是指一个三位数,他的每位数字的立方和等于其本身
func main() {
for num := 100; num <= 999; num++ {
a := num / 100
b := num % 100 / 10 //或 b:= num / 10 % 10
c := num % 10
if a*a*a+b*b*b+c*c*c == num {
fmt.Println(num)
}
}
}
练习:乘法口诀表
func main() {
for i := 1; i < 10; i++ {
for j := 1; j < 10; j++ {
fmt.Print(i, "*", j, "=", i*j, " ")
}
fmt.Println()
}
}
这是矩形的,下面打印个三角形的
func main() {
for i := 1; i < 10; i++ {
for j := 1; j <= i; j++ {
fmt.Print(i, "*", j, "=", i*j, " ")
}
fmt.Println()
}
}