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");
}
}

 

posted @ 2021-08-16 19:25  俊king  阅读(51)  评论(0编辑  收藏  举报