程序流程控制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    
        }
  }
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号