zoukankan      html  css  js  c++  java
  • 8.16Go之循环语句

    8.16Go之循环语句

    Go提供的循环结构:

    • for循环

    • 嵌套循环


    如表所示:

    循环类型描述
    [for 循环] 重复执行语句块
    [循环嵌套] 在 for 循环中嵌套一个或多个 for 循环

    for循环

    Go语言的for循环提供了三种形式

    普通for循环

    Java表示方式:

    for (int i=0; i<10; i++){
    }

    go表示方式:

    for i := 0; i < 10; i++{
    }
    //语法格式为
    for init; condition; post { }
    • init: 一般为赋值表达式,给控制变量赋初值;

    • condition: 关系表达式或逻辑表达式,循环控制条件;

    • post: 一般为赋值表达式,给控制变量增量或减量。

    类似while循环

    Java表示方式:

    while(表达式判断){
    }

    go表示方式:(和C语言的while一样)

    package main

    import "fmt"

    var (
    cirCula bool
    )

    func main() {
    cirCula = true
    for cirCula == true {
    fmt.Println("这是一个真值,其值为:", cirCula)
    break
    }
    fmt.Println("这不是一个真值,其值为:", cirCula)
    }
    类似C的for(;;)
    package main

    import "fmt"

    func main() {
    i := 0
    for {
    i++
    fmt.Println(i)
    if i == 65535 {
    fmt.Println("收工!!!")
    break
    }
    }
    }
    for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。

    类似Java,但又不同

    public class PracticeCirculation{
       private static int[] intArray = new int[]{3,5,7,9};
       public static void main(String[] args){
           for(int num : intArray){
               System.out.Println(num);
          }
      }
    }

    go表示:

    for key, value := range oldMap {
       newMap[key] = value
    }
    //对字符串、数组、切片等进行迭代输出元素。
    //go中的key, value是同时将两个变量变成oldMap里面的key值和value值

    以数组举例:

    package main

    import "fmt"

    var (
    intArray [4]int
    )

    func main() {
    //创建一个四个存储空间的数组
    intArray = [4]int{3,5,7,9}

    //使用range格式
    for key, number := range intArray{
    intArray[key] = number
    fmt.Println(intArray[key]) //intArray数组0号索引的值,key为索引号
    fmt.Println(number) //number为值本身
    }

    numbers := [6]int{1,2,3,4,5,6}
    for i, j := range numbers{
    fmt.Println("第 %d 位的x的值为 %d\n", i, j)
    }
    }

    代码分析:

    在第二个range循环当中
    i为索引
    j为索引下对应的值
    这是定义了两个变量

    go的for-each--->range循环:这种格式的循环可以对字符串、数组、切片等进行迭代输出元素。

    for语句执行过程分析:

    • 1、先对表达式 1 赋初值;

    • 2、判别赋值表达式 init 是否满足给定条件

      • 若其值为真,满足循环条件,则执行循环体内语句,然后执行 post,进入第二次循环,再判别 condition;

      • 否则判断 condition 的值为假,不满足条件,就终止for循环,执行循环体外语句。

    嵌套循环

    以冒泡排序举例:

    	for i := 0; i < len(numbers); i++ {
    for j := 0; j < len(numbers)-1-i; j++ {
    if numbers[j] > numbers[j+1] {
    //设置中间变量
    temp := numbers[j]
    numbers[j] = numbers[j+1]
    numbers[j+1] = temp
    }
    }
    }
    for i, j := range numbers{
    fmt.Println("索引",i, "对应的值为", j)
    }

    循环控制语句

    go语言提供了C语言中的goto语句,使得代码变得更灵活:

    循环控制语句可以控制循环体内语句的执行过程。

    控制语句描述
    [break 语句] 经常用于中断当前 for 循环或跳出 switch 语句
    [continue 语句] 跳过当前循环的剩余语句,然后继续进行下一轮循环。
    [goto 语句] 将控制转移到被标记的语句。

    重点介绍goto语句

    特点:

    • goto 语句可以无条件地转移到过程中指定的行

    坏处:

    • 结构化程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。

    语法:

    goto label;
    ..
    .
    label: statement;

    特点:

    • Java当中虽然移除了goto语句,但是提供了label的方法来变相实现goto语句

      • package PracticeReview.Algorithm;

        /**
        * 使用Label的方式实现C中的goto语句
        * @since JDK 1.8
        * @date 2021/08/16
        * @author Lucifer
        */
        public class GoToCirculation {
        private static int intArray = 10;
        public static void goToLabel(int arr){
        Loop:
        while (intArray<20){
        if (intArray==15){
        //自增
        intArray += 1;
        continue Loop;
        }
        System.out.println(intArray);
        intArray++;
        }
        }
        }
      • 通过加标签label的方式来实现

    • go语言直接使用关键字+标签的形式更加直观的体现出来:

    	num := 10
    Loop:
    for num < 20 {
    if num == 15 {
    //自增,回到标签处
    num += 1
    goto Loop
    }
    fmt.Println(num)
    num++
    }

    无限循环

    循环中条件语句永远不为 false 则会进行无限循环

    package main

    import "fmt"

    func main() {
    for true {
    fmt.Printf("这是无限循环。\n");
    }
    }
  • 相关阅读:
    Java [Leetcode 190]Reverse Bits
    Java [Leetcode 88]CMerge Sorted Array
    Java [Leetcode 160]Intersection of Two Linked Lists
    Java [Leetcode 111]Minimum Depth of Binary Tree
    Java [Leetcode 225]Implement Stack using Queues
    D365 FO 视图Computed字段
    D365 FO最佳实践BP(五)-Display 方法缓存
    D365 FO最佳实践BP(四)-EDT未迁移
    How to change comment
    How to force to Fullscreen Form
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15149545.html
Copyright © 2011-2022 走看看