第六章 Scala if..else與循環(huán)

1 IF...ELSE 語(yǔ)句

Scala IF...ELSE 語(yǔ)句是通過(guò)一條或多條語(yǔ)句的執(zhí)行結(jié)果(True或者False)來(lái)決定執(zhí)行的代碼塊葛菇。

1.1 if 語(yǔ)句

if 語(yǔ)句有布爾表達(dá)式及之后的語(yǔ)句塊組成甘磨。

if(布爾表達(dá)式)
{
   // 如果布爾表達(dá)式為 true 則執(zhí)行該語(yǔ)句塊
}

如果布爾表達(dá)式為 true 則執(zhí)行大括號(hào)內(nèi)的語(yǔ)句塊,否則跳過(guò)大括號(hào)內(nèi)的語(yǔ)句塊眯停,執(zhí)行大括號(hào)之后的語(yǔ)句塊济舆。

object Test {
   def main(args: Array[String]) {
      var x = 10;

      if( x < 20 ){
         println("x < 20");
      }
   }
}

執(zhí)行以上代碼,輸出結(jié)果為:

x < 20

1.2 if...else 語(yǔ)句

if 語(yǔ)句后可以緊跟 else 語(yǔ)句莺债,else 內(nèi)的語(yǔ)句塊可以在布爾表達(dá)式為 false 的時(shí)候執(zhí)行滋觉。

var myVar = 10;
val myVal = "Hello, Scala!";

if...else 的語(yǔ)法格式如下:

if(布爾表達(dá)式){
   // 如果布爾表達(dá)式為 true 則執(zhí)行該語(yǔ)句塊
}else{
   // 如果布爾表達(dá)式為 false 則執(zhí)行該語(yǔ)句塊
}

示例:

object Test {
   def main(args: Array[String]) {
      var x = 30;

      if( x < 20 ){
         println("x 小于 20");
      }else{
         println("x 大于等于 20");
      }
   }
}

執(zhí)行以上代碼签夭,輸出結(jié)果為:

x 大于等于 20

1.3 if...else if...else 語(yǔ)句

if 語(yǔ)句后可以緊跟 else if...else 語(yǔ)句,在多個(gè)條件判斷語(yǔ)句的情況下很有用椎侠。
語(yǔ)法
if...else if...else 語(yǔ)法格式如下:

if(布爾表達(dá)式 1){
   // 如果布爾表達(dá)式 1 為 true 則執(zhí)行該語(yǔ)句塊
}else if(布爾表達(dá)式 2){
   // 如果布爾表達(dá)式 2 為 true 則執(zhí)行該語(yǔ)句塊
}else if(布爾表達(dá)式 3){
   // 如果布爾表達(dá)式 3 為 true 則執(zhí)行該語(yǔ)句塊
}else {
   // 如果以上條件都為 false 執(zhí)行該語(yǔ)句塊
}

示例:

object Test {
   def main(args: Array[String]) {
      var x = 30;
      if( x == 10 ){
         println("X 的值為 10");
      }else if( x == 20 ){
         println("X 的值為 20");
      }else if( x == 30 ){
         println("X 的值為 30");
      }else{
         println("無(wú)法判斷 X 的值");
      }
   }
}

執(zhí)行以上代碼第租,輸出結(jié)果為:

X 的值為 30

1.4 if...else 嵌套語(yǔ)句

if...else 嵌套語(yǔ)句可以實(shí)現(xiàn)在 if 語(yǔ)句內(nèi)嵌入一個(gè)或多個(gè) if 語(yǔ)句。
語(yǔ)法
if...else 嵌套語(yǔ)句語(yǔ)法格式如下:
示例:

if(布爾表達(dá)式 1){
   // 如果布爾表達(dá)式 1 為 true 則執(zhí)行該語(yǔ)句塊
   if(布爾表達(dá)式 2){
      // 如果布爾表達(dá)式 2 為 true 則執(zhí)行該語(yǔ)句塊
   }
}

示例:

object Test {
   def main(args: Array[String]) {
        var x = 30;
        var y = 10;

         if( x == 30 ){
            if( y == 10 ){
            println("X = 30 , Y = 10");
         }
      }
   }
}

執(zhí)行以上代碼我纪,輸出結(jié)果為:

X = 30 , Y = 10

1.5 類(lèi)比Java的三元表達(dá)式if...else 語(yǔ)句

Java中的三元表達(dá)式是一種簡(jiǎn)潔的條件語(yǔ)句慎宾,它由三部分組成:條件表達(dá)式、真值表達(dá)式和假值表達(dá)式浅悉。它的語(yǔ)法格式如下:
實(shí)例:

(條件表達(dá)式) ? (真值表達(dá)式) : (假值表達(dá)式);

示例:

int a = 10;
int b = 20;
int max = (a > b) ? a : b;
System.out.println("較大的數(shù)是:" + max);

scala類(lèi)比三元表達(dá)式

val a = 10;
val b = 20;
val max = if(a > b)  a else  b

2 Scala 循環(huán)

image.png

2.1 while 循環(huán)

只要給定的條件為 true趟据,Scala 語(yǔ)言中的 while 循環(huán)語(yǔ)句會(huì)重復(fù)執(zhí)行循環(huán)體內(nèi)的代碼塊。
語(yǔ)法
Scala 語(yǔ)言中 while 循環(huán)的語(yǔ)法:

while(condition)
{
   statement(s);
}

示例:

object Test {
   def main(args: Array[String]) {
      // 局部變量
      var a = 10;
      // while 循環(huán)執(zhí)行
      while( a < 20 ){
         println( "Value of a: " + a );
         a = a + 1;
      }
   }
}

2.1 do...while 循環(huán)

不像 while 循環(huán)在循環(huán)頭部測(cè)試循環(huán)條件, Scala 語(yǔ)言中术健,do...while 循環(huán)是在循環(huán)的尾部檢查它的條件
do...while 循環(huán)與 while 循環(huán)類(lèi)似汹碱,但是 do...while 循環(huán)會(huì)確保至少執(zhí)行一次循環(huán)。
語(yǔ)法
Scala 語(yǔ)言中 while 循環(huán)的語(yǔ)法:

do {
   statement(s);
} while( condition );

示例:

object Test {
   def main(args: Array[String]) {
      // 局部變量
      var a = 10;
      // do 循環(huán)
      do{
         println( "Value of a: " + a );
         a = a + 1;
      }while( a < 20 )
   }
}

2.3 for循環(huán)

for 循環(huán)允許您編寫(xiě)一個(gè)執(zhí)行指定次數(shù)的循環(huán)控制結(jié)構(gòu)荞估。
語(yǔ)法
Scala 語(yǔ)言中 for 循環(huán)的語(yǔ)法:

for( var x <- Range ){
   statement(s);
}

以上語(yǔ)法中咳促,Range 可以是一個(gè)數(shù)字區(qū)間表示 i to j ,或者 i until j泼舱。左箭頭 <- 用于為變量 x 賦值等缀。
實(shí)例

  • 以下是一個(gè)使用了 i to j 語(yǔ)法(包含 j)的實(shí)例:
object Test {
   def main(args: Array[String]) {
      var a = 0;
      // for 循環(huán)
      for( a <- 1 to 10){
         println( "Value of a: " + a );
      }
   }
}
  • 以下是一個(gè)使用了 i until j 語(yǔ)法(不包含 j)的實(shí)例:
object Test {
   def main(args: Array[String]) {
      var a = 0;
      // for 循環(huán)
      for( a <- 1 until 10){
         println( "Value of a: " + a );
      }
   }
}
  • 在 for 循環(huán) 中你可以使用分號(hào) (;) 來(lái)設(shè)置多個(gè)區(qū)間枷莉,它將迭代給定區(qū)間所有的可能值娇昙。以下實(shí)例演示了兩個(gè)區(qū)間的循環(huán)實(shí)例:
object Test {
   def main(args: Array[String]) {
      var a = 0;
      var b = 0;
      // for 循環(huán)
      for( a <- 1 to 3; b <- 1 to 3){
         println( "Value of a: " + a );
         println( "Value of b: " + b );
      }
   }
}
  • for 循環(huán)集合
for( x <- List ){
   statement(s);
}

以上語(yǔ)法中, List 變量是一個(gè)集合笤妙,for 循環(huán)會(huì)迭代所有集合的元素冒掌。

實(shí)例
以下實(shí)例將循環(huán)數(shù)字集合。我們使用 List() 來(lái)創(chuàng)建集合蹲盘。再以后章節(jié)我們會(huì)詳細(xì)介紹集合股毫。

object Test {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6);
      // for 循環(huán)
      for( a <- numList ){
         println( "Value of a: " + a );
      }
   }
}
  • 以下是 for 循環(huán)中過(guò)濾的實(shí)例:
    結(jié)構(gòu)如下:
for( var x <- List if condition1; if condition2... ){
   statement(s);
}

示例:

object Test {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6,7,8,9,10);
      // for 循環(huán)
      for( a <- numList if a != 3; if a < 8 ){
         println( "Value of a: " + a );
      }
   }
}
  • for 使用 yield (守衛(wèi))
    你可以將 for 循環(huán)的返回值作為一個(gè)變量存儲(chǔ)。語(yǔ)法格式如下:
var retVal = for{ var x <- List if condition1; if condition2...
}yield x

示例:

object Test {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6,7,8,9,10);
      // for 循環(huán)
      var retVal = for{ a <- numList  if a != 3; if a < 8 }yield a
      // 輸出返回值
      for( a <- retVal){
         println( "Value of a: " + a );
      }
   }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末召衔,一起剝皮案震驚了整個(gè)濱河市铃诬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苍凛,老刑警劉巖趣席,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異醇蝴,居然都是意外死亡宣肚,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)悠栓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)霉涨,“玉大人按价,你說(shuō)我怎么就攤上這事◇仙” “怎么了楼镐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)往枷。 經(jīng)常有香客問(wèn)我鸠蚪,道長(zhǎng),這世上最難降的妖魔是什么师溅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任茅信,我火速辦了婚禮,結(jié)果婚禮上墓臭,老公的妹妹穿的比我還像新娘蘸鲸。我一直安慰自己,他們只是感情好窿锉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布酌摇。 她就那樣靜靜地躺著,像睡著了一般嗡载。 火紅的嫁衣襯著肌膚如雪窑多。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天洼滚,我揣著相機(jī)與錄音埂息,去河邊找鬼。 笑死遥巴,一個(gè)胖子當(dāng)著我的面吹牛千康,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铲掐,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼拾弃,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了摆霉?” 一聲冷哼從身側(cè)響起豪椿,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎携栋,沒(méi)想到半個(gè)月后搭盾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刻两,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年增蹭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磅摹。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滋迈,死狀恐怖霎奢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情饼灿,我是刑警寧澤幕侠,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站碍彭,受9級(jí)特大地震影響晤硕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庇忌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一舞箍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧皆疹,春花似錦疏橄、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至表牢,卻和暖如春窄绒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背崔兴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工彰导, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恼布。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓螺戳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親折汞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • scala學(xué)習(xí)筆記 第2章 變量和數(shù)據(jù)類(lèi)型 基本數(shù)據(jù) scala的核心數(shù)據(jù)為四種 :字面量盖腿、值爽待、變量、類(lèi)型 值使...
    485b1aca799e閱讀 2,113評(píng)論 0 1
  • 1. 特點(diǎn): Scala是一門(mén)多范式編程語(yǔ)言翩腐,集成了面向?qū)ο缶幊毯秃瘮?shù)式編程等多種特性鸟款。 Scala運(yùn)行在虛擬機(jī)上...
    EmmaQin閱讀 1,284評(píng)論 0 0
  • 語(yǔ)句基礎(chǔ) 語(yǔ)句的常見(jiàn)類(lèi)別表達(dá)式語(yǔ)句:表達(dá)式后加分號(hào),對(duì)表達(dá)式求值后丟棄茂卦,可能產(chǎn)生副作用空語(yǔ)句:僅包含一個(gè)分號(hào)的語(yǔ)句...
    徐凱_xp閱讀 193評(píng)論 0 0
  • 1. 條件控制 1.1 if 與Java語(yǔ)言的if語(yǔ)句類(lèi)似 當(dāng)邏輯表達(dá)式結(jié)果為true時(shí)何什,執(zhí)行方法體中的代碼當(dāng)方法...
    yangsg閱讀 1,707評(píng)論 0 4
  • 第六章 C 控制語(yǔ)句:循環(huán) 6.1 再探 while 循環(huán) 偽代碼(pseudocode) 6.2 while 語(yǔ)...
    One2INF閱讀 71評(píng)論 0 0