计算机中,我们经常需要对某些代码重复执行多次,一开始我们只懂的多复制几遍来让程序执行

package mainimport "fmt"func main() {    fmt.Println("镜头前的你好帅!!")    fmt.Println("镜头前的你好帅!!")    fmt.Println("镜头前的你好帅!!")    fmt.Println("镜头前的你好帅!!")}

这样的做法,让我们要做的事情繁琐了很多,如果我们要输出1000句语句,那么是不是要把这些代码复制1000遍,非常非常麻烦,不过好在基本每个编程语言都提供了循环语句,简化了需要循环使用代码的使用情况,而Go也提供了 for 语句,来解决这些问题

格式

for 变量初始条件; 循环条件; 变量迭代{}for 循环条件{}for {}

代码示例

for 变量初始条件; 循环条件; 变量迭代{}

package mainimport "fmt"func main() {    for init := 1; init < 4; init++ {        fmt.Println("镜头前的你好帅!!")    }}

这里连续输出了3句 "镜头前的你好帅!!",忽略这个的双引号。

看到这里,有人可能会很好奇,这个 for语句的循环顺序是个什么样子,那么下面讲一些

程序指向到 for语句这边,先初始化了 init变量,把它赋值为1,然后去循环条件中判断一下,init 是否小于4,由于条件达成 1 < 4,进去循环代码块中,打印了一遍 "镜头前的你好帅!!",当循环代码块执行完毕后,它会结束第一次循环;

然后进入变量迭代这个地方,也就是 init++,这个时候,因为 init++,所以 init 变为2了,然后再去循环条件中判断一下,这时候 init为2 < 4,所以条件达成,再次进入循环代码块,打印 "镜头前的你好帅!!",然后退出第二次循环;

然后再次进入变量迭代 init++,这时候 init为3,再去循环条件中判断init 是否小于4,由于 init 为3 < 4,所以条件再次达成,进入循环代码块中,再次打印 "镜头前的你好帅!!",然后退出第三次循环,这时候已经打印3次"镜头前的你好帅!!" 了,跟我们上面说连续输出3句的答案是一样的,下面就是如何结束这个 for循环

当第3次循环结束后,进入 变量迭代,这时候 init为4,然后去循环条件中,跟 init < 4对比,由于 init这时候等于4,所以 4 < 4是错误的,所以 for循环彻底结束

为了给大家证明一下,init的值真的为4,我把变量的所属范围,扩大到整个 main函数

package mainimport "fmt"func main() {    var init int    for init = 1; init < 4; init++ {        fmt.Println("镜头前的你好帅!!")    }    fmt.Println("init 的值为:", init)}

我再给大家画个图感受一下

1 只被执行1次,其它执行多少次,都是看条件的

1执行后的顺序,就是 2 → 3 → 4 → 2 → 3 → 4 依次循环(如果条件允许的话)

for 循环条件{}

在Go语言中,是没有 while循环的,但是我们可以用这个模拟一下

什么是 while循环呢?

while (循环条件) {}

这个展示的格式,我是以 Java为例

package mainimport "fmt"func main() {    var init int = 1    for init < 4{        fmt.Println("镜头前的你好帅!!")        init++    }}

这个看起来是不是跟上面的一样,没错,输出的结果是一样的,只是说形式变了而已,它只是没把变量的定义在for后面,for 后面只有一个判断条件,循环迭代我们写在了循环代码块中,这里就不多说了

for {}

package mainimport "fmt"func main() {    var num int = 1    for {        fmt.Println("num 的值为:", num)        if num >= 20 {            break        }        num++    }}

因为这个 for循环是没有循环条件在的,所以我们循环代码块的时候,要给它一个条件,让它执行到某个条件就停止下来,不然这个 for循环会死循环下去...

因为在这个代码中,我们用到了 break关键字,那么接下来就来讲这个关键字在 for循环中的用处

break在循环中的应用

既然上面有代码了,就不多贴一遍了,就说下在代码中,break的用处好了

在循环中,如果执行到break,那么程序会终止这个循环语句,但在多层循环中,只是终止了内层循环语句

package mainimport "fmt"func main() {    for i := 1; i < 5; i++ {        for j := 1; j < 5; j++ {            if  i == 3{                break            }            fmt.Println("这时候的i为:", i)        }    }}

从这个输出可以看到,在内循环中,当判断到 i == 3的时候,终止了内层循环,而外层循环照样可以执行,这时候只要外循环再执行一次,那么内循环就会再次被执行到

那么能不能直接跳出循环呢?答案是有的 ,不过我们需要让 break关键字标签配合

break和标签的使用

package mainimport "fmt"func main() {    label:    for i := 1; i < 5; i++ {        for j := 1; j < 5; j++ {            if  i == 3{                break label            }            fmt.Println("这时候的i为:", i)        }    }    fmt.Println("程序执行完,终止")}

输出只截取了下面一部分,当执行内存循环的时候,判断到 i == 3,执行 break label,这时候,程序的执行就会跳到 label标签定义的地方,如上面代码所示 label :

continue在循环中的应用

package mainimport "fmt"func main() {    for i := 1; i < 5; i++ {        if i == 3 {            continue        }        fmt.Println("这个i的值为:", i)    }    fmt.Println("程序执行完,终止")}

从这个输出可以看出,continue 关键字只是跳出了 i == 3的时候的那一次循环,整个循环之后该怎么执行就该怎么执行,不会跟 break关键字一样,直接终止整个循环,当然这个你可以自己测试一下,把 continue 换成break就好,换成 break后,你会发现打印出来的内容,比用 continue关键字的时候,少了一条 "这个i的值为:4"

在这直接给你们贴图出来看,这个是上面的代码 continue换成break代码后的输出

多种循环中使用 continue

package mainimport "fmt"func main() {    for i := 1; i < 5; i++ {        for j := 1; j < 5; j++ {            if  i == 3{                 continue            }            fmt.Println("这时候的i为:", i)        }    }    fmt.Println("程序执行完,终止")}

为什么是这么输出呢?其实还是例子没举好,在这里,程序其实执行了4次continue语句,当 i == 3的时候,if 语句判断完之后,执行了 continue语句,其实只是跳出了这次内循环,跳出后,因为内循环的条件还能符合,就再次进入内循环,再次执行 if语句中的continue,以此循环4次,所以才没有输出 "这时候的i为:3"。而上面相同代码的 break,是只进入了1次内循环,然后遇到 break后,直接终止内循环,因为还符合外循环的条件,所以再次进入内循环,不过这次的值已经变为4了。

continue和标签的使用

package mainimport "fmt"func main() {    label:    for i := 1; i < 5; i++ {        for j := 1; j < 5; j++ {            if  i == 3{                continue label            }            fmt.Println("这时候的i为:", i)        }    }    fmt.Println("程序执行完,终止")}

从这个可以看到,跟 break跟标签使用不一样,break那边是直接跳到外层for循环后,直接终止了;而 continue跳出外循环后,还继续进去执行,只是没有执行 i == 3这部分的内容

从这两个可以看出来,break跟标签可以停止整个大的循环,而 continue跟标签只能跳出一次大循环,如果跳出后,还符合循环条件,那么会再次进入循环

goto在循环中的应用

goto是跳转语句用的,它只能跟标签结合使用

package mainimport "fmt"func main() {    label:    for i := 1; i < 5; i++ {        for j := 1; j < 5; j++ {            if  i == 3{                goto label            }            fmt.Println("这时候的i为:", i)        }    }    fmt.Println("程序执行完,终止")}

在这里,goto之后,程序进入了死循环,每次当 i == 3之后,调用了 goto label,程序又重新跳转到 for循环语句上面标签处,开始重新执行for,不过这个时候,跟上面的continue和break跳转不一样,它是重新开始执行,所以进入了死循环

return在循环中的应用

package mainimport "fmt"func main() {    for i := 1; i < 5; i++ {        for j := 1; j < 5; j++ {            if  i == 3{                return            }            fmt.Println("这时候的i为:", i)        }    }    fmt.Println("程序执行完,终止")}

从输出看出,程序没有输出 "这时候的i为:4",也没有输出 "程序执行完,终止",这是怎么回事呢?

其实 return关键字,是返回结果,终止函数的执行,在调用的函数中,是跳出调用的函数;如果是main函数,那么是直接程序终止。所以在这里,程序没有执行到后面的 "程序执行完,终止",所以也没有输出它

break跳出几层循环_Go循环语句的使用相关推荐

  1. c语言break跳出几层循环,break跳出几层循环

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. break跳出一层循环,当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体. break 在一 ...

  2. go break跳出两层for循环

    方式一. 使用标记及循环控制语句break,具体示例如下: // 定于一个跳出循环标记endfor := false// 定义嵌套for循环for i := 0; i < 10; i++ {pr ...

  3. continue / break 跳出指定层循环

    刷算法题的过程中遇到以下问题 问题: 两层循环,内层循环中存在 if 判断,当判断成立时需跳出并执行下一轮外层循环.但直接使用 continue 仅跳出内层循环. while(str = readli ...

  4. break 跳出两层甚至多层 for 循环

    这个小技巧我用了很久了,我以为普普通通应该大家都这么用吧,直到前段时间我看到还有人写这样的教程,用什么 goto 等等一些花里胡哨的操作,感觉问题还是没有得到很好的解决,所以我决定写这篇文章,不描述了 ...

  5. python跳出两层for_干货 | 收藏!16段代码入门Python循环语句

    (图片付费下载于视觉中国)作者 | 李明江 张良均 周东平 张尚佳,本文摘编自<Python3智能数据分析快速入门>来源 | 大数据(ID:hzdashuju)[导读]本文将重点讲述for ...

  6. 【Java】两层for循环 break跳出

    1.break跳出最里面一层for循环 如下例 public class DoubleLoop {public static void main(String args[]){for(int i=0; ...

  7. Python 骚操作 之 内层for循环如何break出外层的循环(跳出两层循环)

    In [31]: for i in range(1,5):...: for j in range(5,10):...: print(i,j)...: if j==6:...: break...: el ...

  8. break跳出多层while循环标志位

    有时候我们写while循环时是多层嵌套的,有多个while语句,如果满足某一条件break的话,因为break只能跳出与之最近的while或for循环,但是我们不想写很多个判断条件,这样代码的有效性和 ...

  9. break跳出两重循环

    用感知器算法求下列模式分类的解向量w:     ω1: {(0 0 0)T, (1 0 0)T, (1 0 1)T, (1 1 0)T} ω2: {(0 0 1)T, (0 1 1)T, (0 1 0 ...

最新文章

  1. Visual Studio 2010在简洁中强调团队合作
  2. Deconvolution与Upsampling的区别
  3. Java内存模型深度解析:锁--转
  4. Python selenium对js元素进行增删改查操作
  5. 用python生成云词汇_用python生成词云wordcloud
  6. android线程卡死,Android主线程为什么不因为Loop死循环卡死
  7. 深度学习(4) - 神经网络和反向传播算法
  8. Qt widgets deeps--烧鸡
  9. 并行程序调试、测试与模型检测
  10. CPU 用户时间 系统时间
  11. vsftpd单用户多目录配置
  12. 焊工作业2021年压力焊题库
  13. 【2023秋招】网易雷火游戏研发工程师笔试
  14. 计算机网络安全讲座心得,学习信息安全心得体会
  15. cheng@ARM结构与编程之day3-MOV LSL
  16. 禾瑞亚USB接口电阻触摸屏控制卡QNX 6.5 RTOS操作系统x86架构驱动安装与配置方法
  17. nginx常用配置笔记
  18. 大数据训练营课程大纲项目简介
  19. 【转摘】著名画家毕建勋 学画笔记
  20. 记录自己遇到的问题1

热门文章

  1. 再论意识、行为和结果
  2. 更换手表电池后,如何关闭压合式手表后盖--工具:两枚硬币,钳子,布或纸巾,木板
  3. 开源中国iOS客户端学习——序
  4. STM32中事件标志位与中断标志位
  5. 构造方法可以被private修饰么?
  6. excel 用公式查找单元格
  7. MongoError: Cannot use a session that has ended ---- NodeJs报错
  8. HTTP请求头部+响应码
  9. 《数据密集型计算和模型》第三章_内存计算复习
  10. uniapp 分享缩略图过大怎么办_新版本微信下,如何设置分享到朋友圈的缩略图?...