程序流程控制3

for 循环

func main() {

  //输出10句 “您好,尚硅谷”

  for i := 1; i <=10; i++ {
    fmt.Println("您好,尚硅谷")
  }
}


基本语法:

for循环变量初始化;循环条件;循环变量迭代 {
  循环操作(语句)
}

对上面的语法格式说明:
1)对for循环来说,有四个要素
2)循环变量初始化
3)循环条件
4)循环操作(语句),有人也叫循环体。
5)循环变量迭代

for循环执行的顺序说明:
1)执行循环变量初始化,比如 i := 1
2)执行循环条件,比如 i <= 10
3)如果循环条件为真,就执行循环操作 : 比如 fmt.Println("...")
4)执行循环变量迭代,比如 i++
5)反复执行2、3、4步骤,直到循环条件为false时,就退出for循环

 

 

注意事项和细节说明:

1)循环条件是返回一个布尔值的表达式

2)for循环的第二种使用方式
for 循环判断条件 {
  //循环执行语句
}

将变量初始化和变量迭代写到其他位置

func main() {

  //输出10句 “您好,尚硅谷”
  i := 1
  for i <=10 {
    fmt.Println("您好,尚硅谷")
    i++
  }
}



3)for循环的第三种使用方式
for {
  //循环执行语句
}
上面的写法等价 for ; ; {} 是一个无限循环,通常需要配合break语句使用

func main() {
  k := 1
  for {   //等价于 for ; ; {
    if k <= 10 {
      fmt.Println("ok")
    } else {
      break
    }
    k++
  }
}

4)Golang 提供 for-range 的方式,可以方便遍历字符串和数组。

注意:for-range在遍历字符串时,是按照字符来遍历的,而不是按照字节来的,请注意这点。


细节讨论:
如果我们的字符串含有中文,那么传统的遍历字符串方式,就是错误,会出现乱码。原因是传统的对字符串的遍历是按照字节来遍历,而一个汉字在utf8编码是对应3个字节。

如何解决: 需要将 str 转成 []rune 切片

对应 for-range 遍历方式而言,是按照字符方式遍历。因此如果有字符串有中文,也是OK的。

案例:

1)打印1~100之间所有是9的倍数的整数的个数及总和


func main() {

  //分析思路
  //1.使用for循环对 max 进行遍历
  //2.当一个数%9 == 0 就是9的倍数
  //3.我们需要声明两个变量 count 和 sum 来保存个数和总和
  var count int
  var sum int
  for i := 1; i <= 100; i++ {
    if i % 9 == 0 {
    count++
    sum += i
    }
  }
  fmt.Printf("count=%v sum=%v\n", count, sum)
}


2)完成下面的表达式输出,6是可变的。

 

func main() {

  var n int = 6
  for i := 0; i <= n; i++ {
    fmt.Printf("%v + %v = %v \n", i, n - i, n)
  }
}

 

while 和  do..while

Go语言没有while 和 do..while 语法,这一点需要注意。如果我们需要使用类似其他语言(比如 java / c 的 while 和 do..while ),可以通过for循环来实现其使用效果。

1)for循环实现while的效果
for {
  if 循环条件表达式 {
    break   //跳出for循环..
  }
  循环操作(语句)
  循环变量迭代
}

例子:

func main() {
  var i int = 1
  for {
    if i > 10 {
      break
    }
    fmt.Println("hello, world", i)
    i++
  }
}

 

do..while的实现
2)for循环实现do..while的效果

循环变量初始化
for {
  循环操作(语句)
  循环变量迭代
  if 循环条件表达式 {
    break //跳出for循环..
  }
}


说明:

1)上面的循环是先执行,在判断,因此至少执行一次。
2)当循环条件成立后,就会执行break, break 就是跳出for循环,结束循环


案例:

func main() {

  var j int = 1
  for {
    fmt.Println("hello,ok", j)
    j++
    if j > 10 {
      break
    }
  }

}

posted @ 2019-08-13 00:07  我是一只忙碌的小青蛙  阅读(180)  评论(0编辑  收藏  举报