8.16Go之迴圈語句
阿新 • • 發佈:2021-08-16
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 mainIt's a lonely road!!!
import "fmt"
func main() {
for true {
fmt.Printf("這是無限迴圈。\n");
}
}