一、基于计数器的迭代

  • 格式
for 初始化语句; 条件语句; 修饰语句{}
  • 实例
package main

import "fmt"

func main(){
    for i:=0;i<10;i++{
        fmt.Print(i)
    }
    fmt.Println()
    /*
    执行步骤:
        1、 初始化,条件判断,条件成立执行循环体,不成立结束for循环
        2、条件成立执行循环体,i++,条件判断
        3、条件成立执行循环体,i++,条件判断
        4、...
        5、条件不成立结束循环体
    */
    
    // 求 100 以内偶数之和
    var sum int = 0
    for i:=0;i <= 100;i++{
        if i%2 == 0{  // 取余为0 则为偶
            sum += i
        }
    }
    fmt.Println(sum)

    // 99乘法表
    for i:=1;i<10;i++{
        for j:=1 ;j<=i;j++{
            fmt.Printf("%d * %d = %d ",j,i,j*i)
        }
        fmt.Println("")
    }
}

0123456789


二、基于条件判断的迭代

  • 格式
for 条件语句{}
  • 实例
package main

import "fmt"

func main(){
    // 求 100以内 奇数之和
    var sum,i int // 多相同类型变量声明
    i = 0
    for i<=100{
        if i % 2 != 0{
            sum += i
        }
        i++
    }
    fmt.Println(sum)


    // 也可以这样
    var sum1,j int
    j = 0
    for true{ // 条件永远为 true
        if j % 2 != 0{
            sum1 += j
        }
        j++
        if j > 100{
            break // 中断当前循环,或跳出当前循环体
        }
    }
    fmt.Println(sum1)
}

三、无限循环

  • 格式
for{}
// 与 for true {},行为是一样的
// 
  • 实例
package main

import "fmt"

func main(){
    // 输入内容并打印在终端
    var content string
    for {
        fmt.Print("请输入内容:")
        fmt.Scanf("%s\n",&content) // &content 是content的内存地址
        fmt.Println("你输入的内容是:",content)
    }
}

四、for-range语法

  • 格式
    这是 Go 特有的一种的迭代结构,您会发现它在许多情况下都非常有用。它可以迭代任何一个集合(包括数组和 map,详见第 7 和 8 章)。语法上很类似其它语言中 foreach 语句,但您依旧可以获得每次迭代所对应的索引
for ix, val := range coll { }
  • 实例
package main

import (
    "fmt"
)

func main(){
    str := "jmz is good man"
    for index,v := range str{
        // v 是 rune 类型,所以需要转化成string 类型
        fmt.Println(index , " - " , string(v))
    }

    str1:= "from 中国"
    for _,v := range str1{ // _ 省略 第一个返回参数
        fmt.Println(v, " - ", string(v))
    }

    // 关于rune类型  一个字符串是unicode编码的字符。
    // 下面的结果处理与上面的一样
    value := []rune(str1) // 切片类型 ,将str1 转成切片类型
    i := 0
    for i<len(value){
        fmt.Println(string(value[i]))
        i++
    }
}
  • 统计字符中相同字符的个数
package main

import "fmt"

func main(){
    str := "上海自来水来自海上,are you know?hahahah"
    count := make(map[string]int) // map 类型(引用类型)
    /*
    // count := make(map[string]int) 相当于:
    var count map[string]int
    count = make(map[string]int)
    // 后面会着重讲解
     */
    for _,v := range str{
        count[string(v)] += 1 // 将rune 转化成string :   string(v)
    }
    for k,v := range count{ // map 类型也可以for-range
        fmt.Println(k," - ",v)
    }
}

五、Break 与 continue

  • 解释
break: 跳出当前循环体(结束循环体)
continue: 跳过本次循环,进入下一次循环
  • 实例
package main

import "fmt"

func main(){
    for i:= 0;i<10;i++{
        if i == 3{
            continue
        }
        if i == 6{
            break
        }
        fmt.Println(i)
    }
}
输出结果:
0
1
2
4
5

猜猜结果

  • 猜猜一
for i:=0;i<10;i++{
    var j int
    fmt.Println(j)
    j = 5
}

10个0,j 是局部变量,每次循环都会重新声明,初始值,所以每次都是0

  • 猜猜二
for i:=0;;i++{
    fmt.Println(i)
}

无限循环,一直累加

  • 猜猜三
for i:=0;i<10;{
    fmt.Println(i)
}

无限循环,都是0,没有累加

  • 猜猜四
    for i,j:=2,10;i<j;{
        fmt.Println(i," - ",j)
        i *= 2
        j ++
    }

版权声明:本文为xiaobaiskill原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xiaobaiskill/p/10595334.html