[go学习笔记.第五章.流程控制] 5.break,continue,goto和return

一.break 

break是一个跳转控制语句,用于终止某个语句块的执行,用于中断当前的for循环或者跳出switch语句

基本语法:

        {

        ...

        break

        ...

        }

//案例
//随机生成1~100的一个数,直到生成了99这个数,看看一共用了几次
//注意:在go中,需要生成一个随机数种子,否则返回的数总数一个固定的
//思路:
//为了生成一个随机数,需要使用rand设置一个种子
//time.Now().Unix():返回一个从1970-01-01 00:00:00到现在的秒数
//time.Now().UnixNano():返回一个从1970-01-01 00:00:00到现在的纳秒数
//rand.Seed(time.Now().UnixNano()):生成一个随机数种子

//那么,如何产生一个随机数呢
//编写一个无限循环的控制,然后不停地产生随机数,当生成了99时,就使用break退出这个无限循环
//n := rand.Intn(100) + 1 // [0,100)
//fmt.Println(n)


package main

import 
(
    "fmt"
    "math/rand"
    "time"
)
var count int = 0
for {
    rand.Seed(time.Now().UnixNano())    //生成种子数
    n := rand.Intn(100) + 1    //范围[1, 100)
    count++
    if n == 99 {
        break
    }
}
fmt.Printf("生成99,一共使用了%v次 \n", count)

  注意事项和细节说明

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

2).标签的使用

label1: {
    ...
    label2: {
        ...
        label3: {
            ...
            break label
            ...
        }
    }
}

演示:

//演示一下指定标签的形式来使用break
label1:
for i := 0; i <= 4; i++ {
    //label2:    //设置一个标签
    for j := 0; j <= i; j++ {
        if j == 2 {
            //break    //break默认会跳出最近的for循环
            //break label2
            break label1
        }
        fmt.Println("j=", j)
    }
}
//1.break会默认跳出最近的循环
//2.break后面可以指定标签,跳出标签对应的for循环

    //案例:
    //实现登录验证,有三次机会,如果用户名为"张三",密码为"123456"提示登录成功,否则提示还有几次机会
	var name string
	var pass string
	var channel int = 3
	for i := 1; i <= 3; i++ {
		fmt.Println("请输入用户名")
		fmt.Scanln(&name)
		fmt.Println("请输入密码")
		fmt.Scanln(&pass)
		if name == "张三" && pass == "123456" {
			fmt.Println("登录成功")
			break
		} else {
			channel--
				fmt.Printf("你还有%v次登录机会\n",channel)
		}
	}

二.continue

基本介绍:

1).continue语句用于结束本次循环,继续执行下一次循环

2).continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和前面的使用规则一样

基本语法

{

...

continue

...

}

  

//演示一下指定标签的形式来使用break
label1:
for i := 0; i <= 4; i++ {
    //label2:    //设置一个标签
    for j := 0; j <= i; j++ {
        if j == 2 {
            //continue//continue默认会跳出到最近的一层for循环
            //continue label2
            continue label1
        }
        fmt.Println("j=", j)
    }
}
//1.continue默认会跳出到最近的一层for循环
//2.continue后面可以指定标签,跳出到标签对应的for循环
//案例
//从键盘输入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时,结束程序(使用for,break,continue完成)
	var num int
	var pos int = 0
	var neg int = 0
	for {
		fmt.Println("请输入一个整数:")
		fmt.Scanln(&num)
		if num == 0 {
			break
		}

		if num > 0 {
			pos++
			continue
		} 
		neg++
}
fmt.Printf("正数个数:%v,负数个数:%v", pos, neg)
    //案例
    //某人有100000块钱,每经过一个路口,需要缴费,规则如下:
	//1.当现金>50000时,每次交5%
	//2.当现金<50000时,每次交1000
	//编写程序计算该人可以经过多少次路口,使用break,continue完善成
	var num int  // 经过的-路口数
	var money float64 = 100000  // 所拥有的钱
	for {
		if money > 50000 {
			money = money * 0.95
			num++
			continue
		} 
		money = money - 1000
		if money < 0 {
			break
		}
		num++
	}

	fmt.Printf("经过%v次路口", num)

三.goto

基本介绍

1).go语言的goto可以无条件地转移到程序中指定的行

2).goto语句经常与条件语句配合使用,可以用来条件转移,跳出循环体等

3).在go程序中一般不主张使用goto,以免造成程序的混乱,使理解和调试都产生困难

基本语法

goto label

...

label :

...

package main

import (
	"fmt"
)
func main()  {
	var n int = 10

	fmt.Println("ok1")
	fmt.Println("ok2")
	fmt.Println("ok3")
	if n < 10 {
		goto label1
	}
	fmt.Println("ok4")
	fmt.Println("ok5")
	label1:
	fmt.Println("ok6")
	fmt.Println("ok7")
}

四.return

基本介绍

return在方法中使用时,表示跳出所在的函数或方法

for i := 1; i <= 10; i++ {
    if i == 8 {
        return
    }
    fmt.Println("i=", i)
}
fmt.Println("跳出了for循环")

 说明:

1).如果return是在普通函数中,则跳出该函数,即不再执行函数中的return后面的代码,也可以理解成终止函数

2).如果在main函数中,表示终止main函数,也就是终止程序

上一节:[go学习笔记.第五章.流程控制] 4.多重循环控制 

下一节:[go学习笔记.第六章.函数,包,错误处理] 1.函数概念

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值