2021-07-21 尚硅谷_流程控制

Math.random(): [0.0, 1.0): 左閉右開
公式:[a, b]: (int)(Math.random() * (b - a + 1) + a)

1、if...else...

  • else:就近匹配原則。

針對條件表達(dá)式:

  1. 如果多個條件表達(dá)式之間是“互斥”關(guān)系(或沒有交集的關(guān)系),哪個判斷和執(zhí)行語句聲明在上面還是下面,無所謂。
  2. 如果多個條件表達(dá)式之間有交集的關(guān)系,需要根據(jù)實際情況,考慮清楚應(yīng)該將哪個結(jié)構(gòu)聲明在上面。
  3. 如果多個條件表達(dá)式之間有包含關(guān)系,通常情況下,需要將范圍小的聲明在范圍大的上面。否則,范圍小的就沒機會執(zhí)行了。

2、switch-case

  • switch結(jié)構(gòu)中的表達(dá)式,只能是如下的6種數(shù)據(jù)類型之一:byte、shortchar、int、枚舉(JDK5.0新增)、String(JDK7.0新增)。
  • case之后只能聲明常量,不能聲明范圍。
  • default相當(dāng)于if-else結(jié)構(gòu)中的elsedefault結(jié)構(gòu)是可選的,而且位置是靈活的。

說明:我們寫分支結(jié)構(gòu)時,當(dāng)發(fā)現(xiàn)既可以使用switch-case(同時,switch中表達(dá)式的取值情況不太多),又可以使用if-else時,我們優(yōu)先選擇使用switch-case。
原因:switch-case執(zhí)行效率稍高。

3、循環(huán)結(jié)構(gòu)的4個要素

① 初始化條件
② 循環(huán)條件 ---> 是boolean類型
③ 循環(huán)體
④ 迭代條件

4、for循環(huán)

  • break:跳出循環(huán)。
for (int i = 0; i <= 5; i++) {
  System.out.prntln("Hello World!");
}
// i: 在for循環(huán)內(nèi)有效,出了for循環(huán)就失效了。
System.out.prntln(i);

5、while循環(huán)

  • 說明:寫while循環(huán)千萬小心不要丟了迭代條件。一旦丟了,就可能導(dǎo)致死循環(huán)!
  • for循環(huán)和while循環(huán)是可以相互轉(zhuǎn)換的。

示例:遍歷100以內(nèi)的偶數(shù)

int i = 1;
while(i <= 100){
  if (i % 2 === 0) {
    System.out.println(i);
  }
  // 迭代條件
  i++;
}

6、do-while

  • 說明:do-while循環(huán)至少會執(zhí)行一次循環(huán)體!
    示例:遍歷100以內(nèi)的偶數(shù)
int num = 1;
do {
   if (num % 2 === 0) {
     System.out.println(num);
   }
   // 迭代條件
   i++;
} while(num <= 100);

7、無限循環(huán)

最簡單的“無限”循環(huán)格式:while(true),for(;;),無限循環(huán)存在的原因是并不知道循環(huán)多少次,需要根據(jù)循環(huán)體內(nèi)部某些條件,來控制循環(huán)的結(jié)束。

題目:
從鍵盤讀入個數(shù)不確定的整數(shù),并判斷讀入的正數(shù)和負(fù)數(shù)的個數(shù),輸入為0時結(jié)束程序。

import java.util.Scanner;
class ForWhileTest {
  public static void main(String args[]) {
    Scanner scan = new Scanner(System.in);
    int positiveNumber = 0; // 記錄正數(shù)的個數(shù)
    int negativeNumber = 0; // 記錄負(fù)數(shù)的個數(shù)
    while (true) {
      int number = scan.nextInt();
      if (number > 0) {
        positiveNumber++;
      } else if (number < 0) {
        negativeNumber++;
      } else {
        // 一旦執(zhí)行break,跳出循環(huán)
        break;
      }
    }
  }
}

8、嵌套循環(huán)

示例:100以內(nèi)的所有質(zhì)數(shù)。(素數(shù),只能被1和它本身整除的自然數(shù)。)

// 獲取當(dāng)前時間距離1970-01-01 00:00:00 的毫秒數(shù)
long start = System.currentTimeMillis();
boolean isFlag = true; // 標(biāo)識i是否被j除盡,一旦除盡,修改其值為false。
for(int i = 2; i <= 100; i++) {
  // 優(yōu)化二:j < i 改成 j <= Math.sqrt(i),對本身是質(zhì)數(shù)的自然數(shù)是有效的。
  for (int j = 2; j <= Math.sqrt(i); j++) {
    if (i % j === 0) { // i被j除盡
      isFlag = false;
      break; // 優(yōu)化一:只對本身非質(zhì)數(shù)的自然數(shù)是有效的。
    }
  }
  if (isFlag === true) {
    System.out.println(i);
  }
  // 重置isFlag
  isFlag = true;
}

// 獲取當(dāng)前時間距離1970-01-01 00:00:00 的毫秒數(shù)
long end= System.currentTimeMillis();
System.out.pringln("所花費的時間為:" + (end - start));

9、break和continue關(guān)鍵字的使用

不同點:

  • break:在循環(huán)中使用時,作用是結(jié)束當(dāng)前循環(huán)。
  • continue:在循環(huán)中使用時,作用是結(jié)束當(dāng)次循環(huán)。

相同點:
關(guān)鍵字后面不能聲明執(zhí)行語句。

  • break默認(rèn)跳出包裹此關(guān)鍵字最近的一層循環(huán)。
  • 帶標(biāo)簽的break
label: for (int i = 1; i <= 4; i++) {
  for (int j = 1; j <= 10; j++) {
    if (j % 4 === 0) {
      break label; // 結(jié)束指定標(biāo)識的一層循環(huán)結(jié)構(gòu)
    }
  }
}
  • 帶標(biāo)簽的continue
label: for (int i = 1; i <= 4; i++) {
  for (int j = 1; j <= 10; j++) {
    if (j % 4 === 0) {
      continue label; // 結(jié)束指定標(biāo)識的一層循環(huán)結(jié)構(gòu)的當(dāng)次循環(huán)
    }
  }
}

示例:100以內(nèi)的所有質(zhì)數(shù)。(素數(shù),只能被1和它本身整除的自然數(shù)。)

int count = 0; // 統(tǒng)計質(zhì)數(shù)的個數(shù)
// 獲取當(dāng)前時間距離1970-01-01 00:00:00 的毫秒數(shù)
long start = System.currentTimeMillis();
label: for(int i = 2; i <= 100; i++) {
  // 優(yōu)化二:j < i 改成 j <= Math.sqrt(i),對本身是質(zhì)數(shù)的自然數(shù)是有效的。
  for (int j = 2; j <= Math.sqrt(i); j++) {
    if (i % j === 0) { // i被j除盡
      continue label;
    }
  }
  // 能執(zhí)行到此步驟的,都是質(zhì)數(shù)
  count++;
}

// 獲取當(dāng)前時間距離1970-01-01 00:00:00 的毫秒數(shù)
long end= System.currentTimeMillis();
System.out.pringln("所花費的時間為:" + (end - start));

10、return的使用

  • return:并非專門用于結(jié)束循環(huán)的,它的功能是結(jié)束一個方法。當(dāng)一個方法執(zhí)行到一個return語句時,這個方法將被結(jié)束。
  • breakcontinue不同的是,return直接結(jié)束整個方法,不管這個return處于多少層循環(huán)之內(nèi)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一.程序控制 種類: 順序及結(jié)構(gòu)順序結(jié)構(gòu).png 選擇結(jié)構(gòu)選擇結(jié)構(gòu).png 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu).png 二.條件語句...
    王歡樂whl閱讀 316評論 0 0
  • 我們經(jīng)常需要代碼在滿足一定條件時進(jìn)行執(zhí)行,或者需要重復(fù)執(zhí)行代碼多次,此時需要選擇條件語句(if-else if-e...
    imsilence閱讀 293評論 0 0
  • 1,if...else if(條件表達(dá)式1){執(zhí)行代碼塊1;}else if (條件表達(dá)式2){執(zhí)行代碼塊2;}…...
    felix521閱讀 246評論 0 0
  • 分支結(jié)構(gòu): 寫出結(jié)果:class Demo{ public static void main(String[...
    Mr_WangZz閱讀 1,387評論 0 1
  • 一、if 語句 語法結(jié)構(gòu):// 條件成立執(zhí)行代碼,否則什么也不做if (條件表達(dá)式) {// 條件成立執(zhí)行的代碼語...
    testleaf閱讀 339評論 0 5

友情鏈接更多精彩內(nèi)容