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可是這些解決辦法並不完美,因為業務需求是千變萬化的,並非限定在幾種固定模式。同時,以上規則容易使人混淆,一旦沒搞清楚until和downto的開閉區間,在判斷邊界值時會產生問題。所以更靈活的解決方案是,起止數值、條件判斷、迴圈方向與遞增值都應當在**中明確指定,「for (初始; 條件; 增減)」這個規則固然廢除了,但開發者依舊能夠使用while語句實現相關功能,kotlin的while迴圈與j**a的處理是一致的,下面是使用while進行迴圈判斷的**例子:for (i in 11 until 66)
// 每次預設遞增1,這裡改為每次遞增4
for (i in 23..89 step 4)
// for迴圈預設遞增,這裡使用downto表示遞減
for (i in 50 downto 7)
btn_repeat_begin.setonclicklistener ,\n"既然while語句保留了下來,do/while語句繼續保留,寫法也沒什麼變化,採用do/while寫法的**如下所示:} else 。\n"
}i++
}poem = "$該詩歌一共有$句。"
tv_poem_content.text = poem
}
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, "千里江陵一日還", "", "兩岸猿聲啼不住", " ", "輕舟已過萬重山", "送孟浩然之廣陵")看來合法性判斷用到的continue和break,kotlin並沒有做什麼改進呀?這是真的嗎?如果是真的,那真是圖樣圖森破。以往我們操作多層迴圈的時候,有時在內層迴圈發現某種狀況,就得跳出包括外層迴圈在內的整個迴圈。例如遍歷詩歌陣列,一旦在某個詩句中找到「一」字,便迅速告知外界「我中獎啦」之類的歡呼。可是這裡有兩層迴圈,如果使用j**a編碼,只能先跳出內層迴圈,然後外層迴圈通過判斷標誌位再決定是否跳出,而不能從內層迴圈直接跳出外層迴圈。現在kotlin大筆一揮,幹嘛這麼麻煩,咱想跳到**就跳到**,只消給外層迴圈加個@標記,接著遇到情況便直接跳出到這個標記,猶如孫悟空蹦上筋斗雲,想去哪就去哪,多方便。這個創意真好,省事省力省心,趕緊看看下面**是怎麼實現的:btn_repeat_continue.setonclicklistener ,\n"
} else 。\n"
}count++
if (count == 4)
break
}tv_poem_content.text = poem
}
btn_repeat_break.setonclicklistener總結一下,對於迴圈語句的操作,kotlin仍然保留了for和while兩種迴圈,主要區別在於:kotlin取消了「for (初始; 條件; 增減)」這個規則,不過新增了對跳出多重迴圈的支援(通過「break@標記位」實現)。j++}
// //如果內層迴圈直接跳出兩層迴圈,那麼下面的判斷語句就不需要了
// if (is_found)
// break
i++}
tv_poem_content.text = if (is_found) "我找到'一'字啦" else "沒有找到'一'字呀"
}
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...