Kotlin入門 7 迴圈語句的操作

2022-09-15 08:09:09 字數 3686 閱讀 5958

koltin處理迴圈語句依舊採納了for和while關鍵字,只是在具體用法上有所微調。首先來看for迴圈,j**a遍歷某個佇列,可以通過「for (item : list)」形式的語句進行迴圈操作。同樣kotlin也能使用類似形式的迴圈,區別在於把冒號「:」換成了關鍵字「in」,具體語句形如「for (item in list)」。下面是kotlin對陣列進行迴圈處理的**例子:

val poemarray:array= arrayof("朝辭白帝彩雲間", "千里江陵一日還", "兩岸猿聲啼不住", "輕舟已過萬重山")

btn_repeat_item.setonclicklistener

tv_poem_content.text = poem

}

上述**的目的是將乙個詩句陣列用逗號與換行符拼接起來,以便在介面上展示完整的詩歌內容。拼接後的詩歌顯示介面如下圖所示:

注意到截圖中每行詩句都以逗號結尾,這有個句點問題,因為每首絕句的第

一、三行末尾才是逗號,第

二、四行的末尾應該是句號;所以這個迴圈**得加以改進,補充對陣列下標的判斷,如果當前是奇數行,則末尾加逗號;如果當前是偶數行,則末尾加句號。倘若使用j**a編碼,要是涉及到下標的迴圈,基本採取「for (初始的賦值語句; 滿足迴圈的條件判斷; 每次迴圈之後的增減語句)」這般形式,具體實現可參考以下的示例**:

for (int i=0; i出人意料的是,kotlin廢除了「for (初始; 條件; 增減)」這個規則;若想實現上述功能,取而代之的,則為「for (i in array.indices)」語句,其中indices表示該陣列物件的下標陣列,每次迴圈都從下標陣列依次取出當前元素的下標。根據該規則判斷下標的數值,再分別在句尾新增逗號與句號,改造後的kotlin**如下所示:

btn_repeat_subscript.setonclicklistener ,\n"

} else 。\n"}}

tv_poem_content.text = poem

}

正確補充標點的詩歌顯示介面如下圖所示:

然而取消「for (初始; 條件; 增減)」這個規則是有代價的,因為實際開發中往往存在非同一般的需求,比如以下幾種情況,kotlin的「for (i in array.indices)」語句就無法很好地處理:

1、如何設定條件判斷的起始值和終止值?

2、每次迴圈之後的遞增值不是1的時候要怎麼辦?

3、迴圈方向不是遞增而是遞減,又如何是好?

4、與條件判斷有關的變數不止乙個,咋整?

5、迴圈過程中的變數,在迴圈結束後還能不能使用?

針對以上情況,其實kotlin也給出了幾個解決辦法,代價是多了幾個諸如until、step、downto這樣的關鍵字,具體用法見下列**:

// 左閉右開區間,合法值包括11,但不包括66

for (i in 11 until 66)

// 每次預設遞增1,這裡改為每次遞增4

for (i in 23..89 step 4)

// for迴圈預設遞增,這裡使用downto表示遞減

for (i in 50 downto 7)

可是這些解決辦法並不完美,因為業務需求是千變萬化的,並非限定在幾種固定模式。同時,以上規則容易使人混淆,一旦沒搞清楚until和downto的開閉區間,在判斷邊界值時會產生問題。所以更靈活的解決方案是,起止數值、條件判斷、迴圈方向與遞增值都應當在**中明確指定,「for (初始; 條件; 增減)」這個規則固然廢除了,但開發者依舊能夠使用while語句實現相關功能,kotlin的while迴圈與j**a的處理是一致的,下面是使用while進行迴圈判斷的**例子:

btn_repeat_begin.setonclicklistener ,\n"

} else 。\n"

}i++

}poem = "$該詩歌一共有$句。"

tv_poem_content.text = poem

}

既然while語句保留了下來,do/while語句繼續保留,寫法也沒什麼變化,採用do/while寫法的**如下所示:

btn_repeat_end.setonclicklistener ,\n"

} else 。\n"

}i++

} while (i < poemarray.size)

poem = "$該詩歌一共有$句。"

tv_poem_content.text = poem

}

前面的迴圈處理其實都還中規中矩,只有內憂沒有外患,但要是陣列裡的詩句本身就不完善,比如有空指標、有空串、有空格串、有多餘串等等,此時就得進行詩句的合法性判斷,如此方可輸出正常的詩歌文字。合法性判斷主要由兩塊**組成:

1、如果發現有空指標、有空串、有空格串,則忽略此行,即使用關鍵字continue繼續下個迴圈;

2、如果合法詩句達到四句,則不管是否遍歷完成,直接拼好絕句並結束迴圈,即使用關鍵字break跳出迴圈;

加入了合法性判斷的**見下,主要演示了continue和break:

val poem2array:array= arrayof("朝辭白帝彩雲間", null, "千里江陵一日還", "", "兩岸猿聲啼不住", "   ", "輕舟已過萬重山", "送孟浩然之廣陵")

btn_repeat_continue.setonclicklistener ,\n"

} else 。\n"

}count++

if (count == 4)

break

}tv_poem_content.text = poem

}

看來合法性判斷用到的continue和break,kotlin並沒有做什麼改進呀?這是真的嗎?如果是真的,那真是圖樣圖森破。以往我們操作多層迴圈的時候,有時在內層迴圈發現某種狀況,就得跳出包括外層迴圈在內的整個迴圈。例如遍歷詩歌陣列,一旦在某個詩句中找到「一」字,便迅速告知外界「我中獎啦」之類的歡呼。可是這裡有兩層迴圈,如果使用j**a編碼,只能先跳出內層迴圈,然後外層迴圈通過判斷標誌位再決定是否跳出,而不能從內層迴圈直接跳出外層迴圈。現在kotlin大筆一揮,幹嘛這麼麻煩,咱想跳到**就跳到**,只消給外層迴圈加個@標記,接著遇到情況便直接跳出到這個標記,猶如孫悟空蹦上筋斗雲,想去哪就去哪,多方便。這個創意真好,省事省力省心,趕緊看看下面**是怎麼實現的:

btn_repeat_break.setonclicklistener 

j++}

// //如果內層迴圈直接跳出兩層迴圈,那麼下面的判斷語句就不需要了

// if (is_found)

// break

i++}

tv_poem_content.text = if (is_found) "我找到'一'字啦" else "沒有找到'一'字呀"

}

總結一下,對於迴圈語句的操作,kotlin仍然保留了for和while兩種迴圈,主要區別在於:kotlin取消了「for (初始; 條件; 增減)」這個規則,不過新增了對跳出多重迴圈的支援(通過「break@標記位」實現)。

kotlin迴圈語句古詩

一 別董大二首 唐代 高適 千里黃雲白日曛,北風吹雁雪紛紛。莫愁前路無知己,天下誰人不識君。2.請編寫程式,先顯示詩詞名稱,然後等待使用者輸入,如果使用者輸入1,顯示該詩詞的第一句,如果使用者輸入2,顯示該詩詞的第二句。當使用者輸入其它數字的時候,顯示作者。3.使用kotlin中空安全的方式 不使用...

7 迴圈語句

輸出結果 1 1 3 5 7 9 一般寫法 include include int func int n if n 5 if n 100 for int i 0 iprintf d n p i ret 1 printf free p free p return ret int main else r...

7 迴圈語句

i 1while i 4print hello i 1 每次自增長1 執行結果 注 一定要有能終止迴圈的語句,否則出現死迴圈 for i in range 10 range 起始值 預設0 終止值 必填 步長 預設1 print i 列印10以內的基數 for i in range 1 10,2 p...