go语言for循环语句
一、基本介绍
让你的代码可以重复执行
二、基本语法
for 循环变量初始化;循环条件;循环变量迭代 {
循环体
}
说明:for循环执行的顺序:
- 循环变量初始化
- 循环条件
- 如果循环条件为真,执行循环体,若循环条件为假则退出循环
- 循环变量迭代
- 反复执行2,3, 4步骤
三、执行流程图
四、注意细节
- 循环条件是返回布尔值的表达式
- for循环的第二种使用方式:
for 循环条件 {
循环体
}
其实是将循环变量初始化和循环变量迭代写在其他位置
例子:
package main
import "fmt"
func main() {
i := 0 // 循环变量初始化
for i < 3 { // 循环变量条件
fmt.Println("Hello, World!")
i++ // 循环变量迭代
}
}
输出结果:
Hello, World!
Hello, World!
Hello, World!
- for循环的第三种使用方法
for {
循环体
}
上面的写法等价于for;;{},是一个无线循环,通常需要配合break语句使用。
例子:
package main
import "fmt"
func main() {
i := 0 // 循环变量初始化
for {
if i < 3 { // 循环变量条件
fmt.Println("Hello, World!")
} else {
break
}
i++ // 循环变量迭代
}
}
输出结果
Hello, World!
Hello, World!
Hello, World!
- for-range方式,用于遍历字符串和数组。
- 传统方式遍历带中文的字符串:
package main
import "fmt"
func main() {
str := "asdfasd上海"
for i := 0 ; i < len(str) ; i++ {
fmt.Printf("下标为%d,值为%c\n",i,str[i])
}
}
输出结果:
下标为0,值为a
下标为1,值为s
下标为2,值为d
下标为3,值为f
下标为4,值为a
下标为5,值为s
下标为6,值为d
下标为7,值为ä
下标为8,值为¸
下标为9,值为
下标为10,值为æ
下标为11,值为µ
下标为12,值为·
可以发现中文为乱码,是按照字节来遍历的
- 改进后传统方式遍历带中文的字符串:
package main
import "fmt"
func main() {
str := "asdfasd上海"
str2 := []rune(str)
for i := 0 ; i < len(str2) ; i++ {
fmt.Printf("下标为%d,值为%c\n",i,str2[i])
}
}
输出结果:
下标为0,值为a
下标为1,值为s
下标为2,值为d
下标为3,值为f
下标为4,值为a
下标为5,值为s
下标为6,值为d
下标为7,值为上
下标为8,值为海
将str转为[]rune,一个rune占4个字节,可以存放下中文
- for-range遍历带中文的字符串:
package main
import "fmt"
func main() {
str := "asdfasd上海"
for index , value := range str {
fmt.Printf("index=%d,value=%c\n",index,value)
}
}
输出结果:
index=0,value=a
index=1,value=s
index=2,value=d
index=3,value=f
index=4,value=a
index=5,value=s
index=6,value=d
index=7,value=上
index=10,value=海
注意:由于go语言是按照utf-8编码的,一个中文占三个字节,for-range遍历字符串是按照字符来遍历的,而不是按照字节来的,所以遍历中"海"的下标是10.
- 对于go语言没有while和do-while语句,可以通过for来实现
- for实现while
循环变量初始化
for {
if 循环条件表达式 {
break
}
循环体
循环变量迭代
}
例子:
package main
import "fmt"
func main() {
i := 0
for {
if i >= 10 {
break
}
fmt.Println("Hello World!")
i++
}
}
- for循环实现do-while
循环变量初始化
for {
循环体
循环变量迭代
if 循环条件表达式 {
break
}
}
例子:
package main
import "fmt"
func main() {
i := 0
for {
fmt.Println("Hello World!")
i++
if i >= 10 {
break
}
}
}
五、经典案例一打印空心三角形
package main
import "fmt"
func main() {
line := 10
for i := 1 ; i <= line ; i++{ // 循环打印多少行
for k := 1 ; k <= line -i ; k ++ { // 循环打印每一行前面打印的空格
fmt.Printf(" ")
}
for j := 1 ; j <= 2*i -1 ; j++ { // 循环打印每一行打印的"*"
//(每一行的第一个或者最后一个打印"*"或者最后一行打印"*",否则打印空格)
if j == 1 || j == 2*i -1 || i == line { // 控制每一行是打印"*"还是打印" ")
fmt.Printf("*")
} else {
fmt.Printf(" ")
}
}
fmt.Println()
}
}
输出结果:
*
* *
* *
* *
* *
* *
* *
* *
* *
*******************
六、经典案例二打印九九乘法表
package main
import "fmt"
func main() {
line := 9
for i := 1 ; i <= line ; i++{
for j := 1 ; j <= i ; j++ {
fmt.Printf("%v * %v = %v ", j,i, j*i)
}
fmt.Println()
}
}
输出结果:
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81