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");
}
}
    It's a lonely road!!!
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号