Kotlin入門:程序的邏輯控制——03

一、程序的邏輯控制

????????程序的執行語句主要分為3種:順序語句、條件語句和循環語句。

二、if條件語句

????????if表達式在Kotlin中用于根據條件執行不同的代碼塊。它有兩種形式:普通if帶返回值的if。

?普通if語句:

????????普通的if語句由關鍵字if、一個布爾表達式和一個代碼塊組成。如果布爾表達式為true,則執行代碼塊;否則,跳過代碼塊。

val x = 10
if (x > 5) {println("x大于5")
} else {println("x小于等于5")
}

帶返回值的if表達式:?

????????帶返回值的if表達式可以用來簡化代碼。它由關鍵字if、一個布爾表達式、一個返回值(true分支)和一個返回值(false分支)組成。它會根據布爾表達式的結果返回相應的值。

val x = 10
val result = if (x > 5) "x大于5" else "x小于等于5"
println(result)

函數中帶返回的if:?

fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) num1 else num2

三、when表達式:?

?????????when表達式類似于switch語句,可以根據不同的條件執行不同的代碼塊。它有兩種形式:普通when帶返回值的when。語法為:匹配值 -> { 執行邏輯 }

?普通when語句:

?????????普通的when語句由關鍵字when、一個待匹配的值和多個分支組成。每個分支包含一個或多個值,當待匹配的值與分支中的值之一相等時,執行對應的代碼塊。

val x = 2
when (x) {1 -> println("x等于1")2 -> println("x等于2")else -> println("x不等于1和2")
}

帶返回值的when表達式:

????????帶返回值的when表達式可以用來簡化代碼。它由關鍵字when、一個待匹配的值和多個分支組成。每個分支包含一個或多個值,并且可以有一個特殊的分支else,用于處理其他未匹配的情況。?

fun getScore(name: String) = when (name) {"Tom" -> 86"Jim" -> 77"Jack" -> 95"Lily" -> 100else -> 0
}

類型匹配:

fun checkNumber(num: Number) {when (num) {is Int -> println("number is Int")is Double -> println("number is Double")else -> println("number not support")}

????????上述代碼中,is關鍵字就是類型匹配的核心,它相當于Java中的instanceof關鍵字。

不在when語句中傳入參數:

fun getScore(name: String) = when {name == "Tom" -> 86name == "Jim" -> 77name == "Jack" -> 95name == "Lily" -> 100else -> 0
}

?????????注意,Kotlin中判斷字 符串或對象是否相等可以直接使用==關鍵字,而不用像Java那樣調用equals()方法。

?其他用法:

????????假設所有名字以Tom開頭的人,他的分數都是86分,這種場景如果用帶參數的when語句 來寫就無法實現,而使用不帶參數的when語句就可以這樣寫,現在不管你傳入的名字是Tom還是Tomy,只要是以Tom開頭的名字,他的分數就是86分。?

fun getScore(name: String) = when {name.startsWith("Tom") -> 86name == "Jim" -> 77name == "Jack" -> 95name == "Lily" -> 100else -> 0
}

四、 循環語句

????????kotlin的循環語句有for循環、while循環和do-while循環。

for循環:

從集合或數組中迭代:?

????????for循環用于對一個集合或者數組進行迭代,逐個處理其中的元素。它的基本語法如下:

val numbers = arrayOf(1, 2, 3, 4, 5)
for (number in numbers) {println(number)
}

????????在上述例子中,我們遍歷了一個整數數組,并將每個元素打印出來。?

Range來指定循環:

????????val range = 0..10的范圍就是[0, 10]。

fun main() {for (i in 0..10) {println(i)}
}

使用for-in循環遍歷區間:

????????val range = 0 until 10 ,它的數學表達方式是[0, 10)。口訣:左閉右開

fun main() {for (i in 0 until 10) {println(i)}
}

結合step函數來指定循環的步長:

fun main() {for (i in 0 until 10 step 2) {println(i)}
}

downTo 關鍵字:

fun main() {for (i in 10 downTo 1) {println(i)}
}

???????????這里我們創建了一個[10, 1]的降序區間。

while循環和do-while循環:?

????????while循環和do-while循環用于根據條件重復執行一段代碼塊。

????????while循環會先檢查條件是否為true,如果是則執行代碼塊,然后再次檢查條件。如果條件為false,則跳過代碼塊。

var i = 0
while (i < 5) {println(i)i++
}

????????do-while循環首先執行一次代碼塊,然后再檢查條件。只有在條件為true時才會繼續執行。?

var i = 0
do {println(i)i++
} while (i < 5)

????????上述兩個例子中,我們通過循環輸出了0到4的數字。?

?五、控制循環流程:

Kotlin提供了幾個控制循環流程的關鍵字:

  • continue:用于跳過循環的當前迭代,直接進入下一次迭代。
  • break:用于完全退出循環,不再執行后續的迭代。
  • return:用于完全退出函數或者匿名函數,不再執行后續的代碼。

? ? ? ? 通過這些關鍵字可以在循環中靈活使用,根據需要來控制循環的行為。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35689.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35689.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35689.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電腦合上蓋子無線網絡不會斷開

控制面板\硬件和聲音\電源選項\系統設置 最終選擇不會采取任何操作 選擇不會采取任何操作

前端性能優化之性能優化的指標和工具(chrome devtools、lighthouse、webpagetest)

文章目錄 引言一、為什么要進行web性能優化二、RAIL測量模型1. 什么是RAIL2. 性能測量工具 三、性能測量工具的使用和性能指標以及優化目標1. Chrome DevTools1. 打開調試工具方式和配置2. network下的幾個性能指標1. requests 請求總數2. transferred實際從服務器下載的數據量…

【數據結構與算法】十大經典排序算法-希爾排序

&#x1f31f;個人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知識導航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ?如有問題&#xff0c;歡迎指正&#…

手撕數據結構之棧+例題

目錄 一、棧的概念及結構 二、棧的頭文件及基本框架 三、接口實現 1、對棧的初始化 2、棧的銷毀 3、入棧操作 4、出棧操作 5、判斷棧是否為空 6、返回棧頂元素 7、遍歷棧 四、有效的括號 - 力扣&#xff08;LeetCode&#xff09; 題目描述&#xff1a; 思路&#xff…

靜態網頁和動態網頁區別

1&#xff0c;靜態網頁和動態網頁有何區別 1) 更新和維護 靜態網頁內容一經發布到網站服務器上&#xff0c;無論是否有用戶訪問&#xff0c;這些網頁內容都是保存在網站服務器上的。如果要修改網頁的內容&#xff0c;就必須修改其源文件&#xff0c;然后重新上傳到服務器上。…

k8s-----集群調度

目錄 一&#xff1a;調度約束 二&#xff1a;Pod 啟動創建過程 三&#xff1a;k8s調度過程 1、Predicate 有一系列的常見的算法 2、常見優先級選項 3、指定調度節點 &#xff08;1&#xff09;nodeName指定 &#xff08;2&#xff09;nodeSelector指定 四&#xff1a;親和…

【SA8295P 源碼分析】68 - Android 側用戶層 輸入子系統獲取 /dev/input/event0 節點數據 代碼流程分析

【SA8295P 源碼分析】68 - Android 側用戶層 輸入子系統獲取 /dev/input/event0 節點數據 代碼流程分析 一、EventHub.cpp 監聽 /dev/input/event0 節點流程二、EventHub.cpp 讀取 /dev/input/event0 節點數據流程系列文章匯總見:《【SA8295P 源碼分析】00 - 系列文章鏈接匯總…

C++——繼承

文章目錄 &#x1f99c;1. 什么是繼承&#x1f40a;1.1 概念&#x1f40a;1.2 格式&#x1f40a;1.3 繼承方式 & 訪問限定符 &#x1f426;2. 派生類和基類的賦值問題&#x1f9a9;3. 派生類和基類同名成員問題&#x1f413;4.派生類默認成員函數&#x1f409;4.1 構造函數…

React源碼解析18(1)------ React.createElement 和 jsx

1.React.createElement 我們知道在React17版本之前&#xff0c;我們在項目中是一定需要引入react的。 import React from “react” 即便我們有時候沒有使用到React&#xff0c;也需要引入。原因是什么呢&#xff1f; 在React項目中&#xff0c;如果我們使用了模板語法JSX&am…

使用OkHttp發送POST請求的幾種方式

使用OkHttp發送POST請求的幾種方式 介紹pom依賴基本的POST請求帶授權的POST請求POST方式發送JSON數據Multipart POST 請求 介紹 本文將介紹 OkHttp 客戶端的基本用法。 主要介紹 OkHttp 3.x 版本中發送Post請求的幾種方式。 pom依賴 <dependency><groupId>com.sq…

單調遞增的數字——力扣738

文章目錄 題目描述解法題目描述 解法 #include<iostream> #include<string>using namespace std;int monotoneIncreasingDigits

【學習】若依源碼(前后端分離版)之 “ 異常處理”

大型紀錄片&#xff1a;學習若依源碼&#xff08;前后端分離版&#xff09;之 “ 異常處理” 前言1、統一返回實體定義2、定義登錄異常定義3、基于ControllerAdvice注解的Controller層的全局異常統一處理4、測試訪問請求結語 前言 通常一個web框架中&#xff0c;有大量需要處理…

中小企業項目管理軟件推薦:選擇適合的工具提升項目效率!

中小企業項目管理軟件有哪些&#xff1f;Zoho Projects是一款好用無廣告的項目管理軟件。當個小創業者是真的不容易&#xff0c;不僅要管理團隊&#xff0c;還要管理團隊項目。很多團隊之前用了好多項目管理的軟件&#xff0c;但是都不太滿意。但是如果你經常參加創業者聚會上&…

常見的路由協議之RIP協議與OSPF協議

目錄 RIP OSPF 洪泛和廣播的區別 路由協議是用于在網絡中確定最佳路徑的一組規則。它們主要用于在路由器之間交換路由信息&#xff0c;以便找到從源到目標的最佳路徑。 常見的路由協議&#xff1a; RIP (Routing Information Protocol)&#xff1a;RIP 是一種基于距離向量算…

Mac os 上的apt-get install 就是brew install

Mac os 上面不支持apt-get install ,但是有個 brew install可以代替。 Homebrew是Mac OS的包管理器&#xff0c;可以方便地安裝各種需要的軟件。 1.1 安裝Homebrew 如果沒有安裝Homebrew&#xff0c;需要在終端輸入以下命令進行安裝&#xff1a; /usr/bin/ruby -e "$(…

使用wxPython和PyMuPDF在Python中顯示PDF目錄的實現

展示如何使用wxPython和PyMuPDF庫在Python中選擇PDF文件并將目錄顯示在列表框中。 簡介&#xff1a; 在本篇教程中&#xff0c;我們將學習如何使用wxPython和PyMuPDF庫在Python中選擇PDF文件&#xff0c;并將其目錄顯示在一個列表框中。這將使用戶能夠方便地瀏覽PDF文檔的目錄…

c#實現設配器模式

下面是一個使用C#實現適配器模式的示例代碼&#xff1a; using System;// 目標接口 public interface ITarget {void Request(); }// 目標類 public class Target : ITarget {public void Request(){Console.WriteLine("目標類的請求");} }// 需要適配的類 public c…

Golang 局部變量、全局變量 聲明

文章目錄 一、局部變量二、全局變量 一、局部變量 四種聲明方式 多變量聲明&#xff1a; package mainimport "fmt"//局部變量聲明 func main() {//方法一: 聲明一個變量和數據類型&#xff0c;不初始化值&#xff1b;默認值為0&#xff1b;var lvA intfmt.Printl…

【MybatisPlus】LambdaQueryWrapper和QueryWapper的區別

個人主頁&#xff1a;金鱗踏雨 個人簡介&#xff1a;大家好&#xff0c;我是金鱗&#xff0c;一個初出茅廬的Java小白 目前狀況&#xff1a;22屆普通本科畢業生&#xff0c;幾經波折了&#xff0c;現在任職于一家國內大型知名日化公司&#xff0c;從事Java開發工作 我的博客&am…

可視化應用:提升教育領域的學習與理解

在教育領域&#xff0c;可視化應用作為一種強大的工具&#xff0c;已經開始發揮著重要的作用。通過將抽象的概念和復雜的數據轉化為直觀的圖形和圖表&#xff0c;可視化應用能夠提升學生的學習效果和理解能力。本文將探討可視化應用在教育領域中的重要性&#xff0c;以及它在不…