Go语言学习笔记(四)---循环流程控制

4.4.5 for循环控制

实现一段代码循环的执行。for循环一共有四个要素,分别是循环变量初始化(i=0)、循环条件(i<10)、循环操作(fmt.println)、循环变量迭代(i++)。直到循环条件为false才退出循环。其中循环条件返回一个bool类型的表达式。

for循环主要存在4种使用方法:

1) 一般情况:for 循环变量初始化;循环条件;循环变量迭代{循环操作 }

2)省略初始化和迭代,将其放到其他位置:for 循环判断条件 {循环操作}

3)只使用for,配合break使用跳出循环。

4)for-range方法【该方法可以直接遍历中文】,方便便利字符串和数组,range返回下标和对应值。

//常用循环
	for i := 1; i < 5; i++ {
		fmt.Println("hello,xzc")
	}
	//变量初始化和变量迭代写到其他位置
	j := 1
	for j < 3 {
		fmt.Println("hello,xzc2")
		j++
	}
	//只是用for配合break语句使用
	k := 1
	for {
		if k < 4 {
			fmt.Println("hello,xzc3")
		} else {
			break
		}
		k++
	}
	//for-range的方式可以方便便利字符串和数组
	//一般方法:该方法遍历中文将会出现乱码,因此需要用切片来处理
	str := "helloworld"
	for i := 0; i < len(str); i++ {
		fmt.Printf("%c", str[i])
	}
	str3 := "你好北京"
	str3_1 := []rune(str3)
	for i := 0; i < len(str3_1); i++ {
		fmt.Printf("%c", str3_1[i])
	}
	//for range遍历,该方法可以直接用来遍历中文
	str2 := "helloxzc"
	for index, val := range str2 {
		fmt.Printf("index=%d,val=%c ", index, val)
	}

4.4.6 while和do…while实现

go语言中没有while和do_while语法,可以通过for循环来实现其使用效果。

while–通过for+if+break来实现,其中for用来循环,if表示限制条件,break用来跳出循环。

do_while同样使用for循环实现,将if_break限制条件写在循环语句之后而已。

	//while表达
	i := 0
	for {
		if i > 5 {
			break
		}
		fmt.Println("hello,while")
		i++
	}
	//do_while表达
	j := 0
	for {
		fmt.Println("hello,do_while")
		j++
		if j > 5 {
			break
		}
	}

4.4.7 多重循环控制

将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的for成为外层循环;在里面的for成为内层循环【一般使用两层,最多不要超过三层】

只有内层循环的循环条件为false时,才会完全跳出内层循环,结束外层的当次循环,开启外层的下一次循环。

外层m次,内层n次,因此内层循环体一共需要执行m*n次

4.4.8 跳转控制语句-break

break语句用于终止某个语句块的执行,用于中断当前for循环或跳出switch语句。

注意:break语句出现在多层嵌套的语句块中,可以通过标签指明要终止的是哪一层语句

	//随机生成数,当大于80时结束
	cout := 0
	for {
		rand.Seed(time.Now().UnixNano()) //这个地方会长时间输出同一个值,有点问题
		n := rand.Intn(100) + 1          //获取1-100之间的随机数[0,100)
		cout++
		fmt.Println(n)
		if n >= 80 {
			break
		}
	}
	fmt.Println(cout)
	//通过标签指定跳出哪一层
    lable2:
	for i := 0; i < 4; i++ {
		//label1:  //设置一个标签
		for j := 0; j < 3; j++ {
			if j == 2 {
				//break  //默认跳出最近的for循环,当j==2时跳出内层循环,继续执行i的循环
				//break label1 //当j==2时,跳出外层循环,执行当前i+1之后的循环。
				break lable2 //结束整个循环
			}
		}
		//找出100之内,当和大于100的当前数字
	sum := 0
	for i := 0; i < 100; i++ {
		sum += i
		if sum > 100 {
			fmt.Println("当前的数为:", i)
			break
		}
	}
	//实现登录验证,只有三次机会,输入正确用户名密码则提示登陆成功
	var name string
	var pwd string
	loginChance := 3
	for i := loginChance; i >= 0; i-- {
		fmt.Scanln(&name)
		fmt.Scanln(&pwd)
		if name == "xzc" && pwd == "123" {
			fmt.Println("登陆成功")
			break
		} else {
			fmt.Printf("输入错误,你还有%d次机会", i)
		}
	}

4.4.9 跳转控制语句-continue

continue语句用于结束本次循环,继续下一次的循环,即后面的代码语句不再执行,二十直接到循环迭代进行下一次的循环判断。

出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,类似break标签使用规则。

func xunhuan_continue() {
	for i := 0; i < 5; i++ {
		if i < 3 {
			fmt.Println("continue之前的语句", i)
			continue
		}
		fmt.Println("continue之后的语句", i)
	}

4.4.10 跳转控制语句-goto

Go语言的goto语句可以无条件的转移到程序中指定行,通常配合条件语句配合使用,可以用来实现条件转移,跳出循环体等功能。

一般而言不主张使用goto语句以免造成程序流程的混乱,使理解和调试程序都产生困难。

func xunhuan_goto() {
	for i := 0; ; i++ {
		if i > 5 {
			goto label1
		}
		fmt.Println(i)
	}
label1:
	fmt.Println("大于五输出")
}

4.4.11 跳转控制语句-return

如果return 在普通函数里,表示跳出该函数,不再执行函数中return后面代码,也可以理解为终止函数。

如果return实在main函数里,表示终止程序。

猜你喜欢

转载自blog.csdn.net/Destinyxzc/article/details/127867555
今日推荐