for循环控制
基本语法
for 循环变量初始化;循环条件;循环变量迭代 {
循环操作(语句)
}
for i := 1;i<=9;i++{
fmt.Println("you are you are")
}
for循环执行的顺序
1)执行循环变量初始化,比如i = 1
2)执行循环条件。比如 i <= 9
3)如果循环条件为真,就执行循环操怍,比如fmt.Println("you are you are")
4)执行循环充量迭代.比如 i++
5)反复执行2.3.4 步骤,直到循环条件为False ,就跳出for循环。
注意事项和细节说明
1)循环条件是返回一个布尔值的表达式
2) for循环的第二种使用方式
for 循环判断条件 {
//循环执行语句
}
将变量初始化和变量迭代写到其它位置
j := 1
for j <= 9{
fmt.Println("you are you are")
j++
}
3) for循环的第 种使用方式
for {
//循环执行语句
}
上面的写法等价for ; ;{ } 是一个无限循环,通常需要配合break语句使用。
4) Golang 提供for-range的方式,可以方便遍历字符串和数组
var str string = "you are"
for index,val := range str {
fmt.Printf("index=%d,val=%c \n",index,val)
}
如果我们的字符串含有中文,那么传统的遍历字符串方式,就是错误,会出现乱码。原区是传统的对字符串的遍历是按照字节来遍历,而一个汉字在utf-8编码是对应3个字节。
var str string = " I'am 成都"
str2 := []rune(str)
for i := 0; i < len(str2); i++ {
fmt.Printf("%c \n",str2[i])
}
练习
var count int = 0
var sum int = 0
for i := 1;i <= 100 ;i++ {
if i % 9 ==0{
count++
sum +=i
}
}
fmt.Printf("count=%v sum=%v \n",count,sum)
while和do...while的实现
Go语言没有while和do...while语法,可以通过for循环来实现其使用效果。
for循环实现while的效果
循环变量初始化
for{
if 循环条件表达式 {
break //跳出for循环
}
循环操作(语句)
循环变量迭代
}
for循环实现do...while的效果
循环变量初始化
for{
循环操作(语句)
循环变量迭代
if 循环条件表达式 {
break//跳出for循环..
}
}
练习
//统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入
var classNum int = 3
var studentNum int = 5
var totalSum float64 = 0.0
for j := 1 ; j <= classNum ;j++{
sum := 0.0
for i :=1; i <= studentNum; i++ {
var score float64 = 0.0
fmt.Printf("请输入第%d班级,第%d同学的成绩 \n",j,i)
fmt.Scanln(&score)
sum += score
}
fmt.Printf("第%d班级,班级平均成绩为%v \n",j,sum/float64(studentNum))
totalSum += sum
}
fmt.Printf("班级总成绩%v,所有班级平均成绩为%v \n",totalSum,totalSum/float64(studentNum))
//使用for循环完成下面的案例请编写一个程序,可以接收一个整数,表示层数,打印出空心金字塔
var totalLevel int = 6
for i := 1; i <=totalLevel ;i++ {
//在打印*前先打印空格
for k := 1; k<=totalLevel-i; k++{
fmt.Print(" ")
}
for j := 1; j <= 2*i - 1; j++ {
//每层的第一个和最后一个是打印* ,最后一行不变
if j==1 || j == 2*i-1 || i== totalLevel{
fmt.Print("*")
}else{
fmt.Print(" ")
}
}
fmt.Println()
}
//九九乘法表
//i:层数
for i:=1;i<=9;i++ {
for j := 1; j<=i;j++ {
fmt.Printf("%v * %v = %v \t",j,i,j*i)
}
fmt.Println()
}
跳转控制语句-break
break语句用于终止某个语句块的执行,用于中断当前for循环或跳出switch 语句。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
var count int =0
for{
//time.Now().unix():返回一个从1970:01:01的e时e分o秒到现在的秒数
rand.Seed(time.Now().UnixNano())
//如何随机的生成1-100整数
ra := rand.Intn(100) +1 //[0, 100)
fmt.Println(ra)
count ++
if ra == 99{
break
}
}
fmt.Println("生成99一共使用了",count)
}
注意事项和细节说明:
1)break语句出现在多层嵌套的语句块中时,可以通过标签指明要终收的是哪一层语句块
2)标签的基本使用
//指定标签的形式来使用break
lable2:
for i := 0;i<4;i++{
//lablel1: //设置一个标签
for j :=0;j<10;j++{
if j==2 {
//break //break默认会跳出最近的for循环
//break lablel1
break lable2
}
fmt.Println("j=",j)
}
}
跳转控制语句-continue
1) continue语句用于结束本次循环,继续执行下一次循环。
2) continue语句 出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和前面的标签的使用的规则一样。
here:
for i := 0;i<4;i++{
//lablel1: //设置一个标签
for j :=0;j<10;j++{
if j==2 {
continue here
}
fmt.Println("j=",j)
}
}
跳转控制语句-goto
1) Go语言的goto语句可以无条件地转移到程序中指定的行。
2) goto语句通常与条件语句配合使用。可用来实现条件转移,跳出循环体等功能。
3) 在Go程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。
//goto的使用
fmt.Println("one")
goto lablel1
fmt.Println("two")
fmt.Println("three")
lablel1:
fmt.Println("four")
fmt.Println("five")
跳转控制语句-return
return 使用在方法或者函数中,表示跳出所在的方法或函数。
1)如果reum是在普通的函数,则表示跳出该函数,即不再执行函数中retum后面代码,也可以
理解成终止函数。
2)如果retum是在main函数,表示終止main函数,也就是说终止程序。