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");
    }
    }
  • 相关阅读:
    Mac php使用gd库出错 Call to undefined function imagettftext()
    centos 使用 locate
    Mac HomeBrew 安装 mysql
    zsh 命令提示符 PROMPT
    新的开始
    Java 面试题分析
    Java NIO Show All Files
    正确使用 Volatile 变量
    面试题整理 2017
    有10阶梯, 每次走1,2 or 3 阶,有多少种方式???
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15149545.html
Copyright © 2011-2022 走看看