JAVA入門 第二章 JAVA基本語法(二)邏輯運算符

2.5 程序流程控制

流程控制語句是用來控制程序中各語句執(zhí)行順序的語句,可以把語句組合成能完成一定功能的小邏輯模塊。

其流程控制方式采用結(jié)構(gòu)化程序設計中規(guī)定的三種基本流程結(jié)構(gòu),即:順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)

  • 順序結(jié)構(gòu)

程序從上到下逐行地執(zhí)行,中間沒有任何判斷和跳轉(zhuǎn)。

  • 分支結(jié)構(gòu)

根據(jù)條件,選擇性地執(zhí)行某段代碼。

有if…else和switch-case兩種分支語句。

  • 循環(huán)結(jié)構(gòu)

根據(jù)循環(huán)條件,重復性的執(zhí)行某段代碼。

有while、do…while、for三種循環(huán)語句。

注??:JDK1.5提供了foreach循環(huán),方便的遍歷集合、數(shù)組元素

2.5.1 順序結(jié)構(gòu)

Java中定義成員變量時采用合法的前向引用。如:

public class Test{
        int num1 = 12;
        int num2 = num1 + 2;
}

2.5.2 分支結(jié)構(gòu)

  • if-else
//1
if(條件表達式){
    執(zhí)行代碼塊;
}
//2
if(條件表達式){
    執(zhí)行代碼塊1;
} 
else{
    執(zhí)行代碼塊2;
}
//3
if(條件表達式1){
    執(zhí)行代碼塊1;
}
else if (條件表達式2){
    執(zhí)行代碼塊2;
}
……
else{
    執(zhí)行代碼塊n;
}

import java.util.Scanner;

public class HelloWorld {
   public static void main(String[] args) {
       System.out.println("Hello world");

       Scanner scan = new Scanner(System.in);

       System.out.println("身高:(cm)");
       // 判斷是否還有輸入
       if (scan.hasNext()) {
           int height = scan.nextInt();
           System.out.println(height);
       }
       // 判斷是否有浮點數(shù)
       System.out.println("財富:(千萬)");
       if (scan.hasNextFloat()) {
           float money = scan.nextFloat();
           System.out.println(money);
       }

       // 判斷是否有布爾值
       System.out.println("帥不:true or false");
       if (scan.hasNextBoolean()) {
           boolean shuai = scan.nextBoolean();
           System.out.println(shuai);
       }

       scan.close();
   }
}
/* 輸出結(jié)果
Hello world
身高:(cm)
1
1
財富:(千萬)
2
2.0
帥不:true or false
false
false
*/
  • switch
    1. switch(表達式) 中的表達式的值必須是:byte short int 枚舉 String
    2. case子句 中的值必須是常量,且互不相同
    3. default子句可任選的。在沒有匹配的case時,執(zhí)行default子句;
    4. break 用來在執(zhí)行完一個case分支后,使程序跳出switch
      語句的塊;若沒有break,程序則會順序執(zhí)行到switch結(jié)尾。
何時可以選擇if或switch語句呢?
  1. 如果判斷的具體數(shù)值不多,而且符合byte、 short 、int、 char這四種類型。雖然兩個語句都可以使用,建議使用swtich語句。因為效率稍高

  2. 其他情況:對區(qū)間判斷,對結(jié)果為boolean類型判斷,使用if,if的使用范圍更廣

2.5.3 循環(huán)結(jié)構(gòu)

在某些條件滿足的情況下,反復執(zhí)行特定代碼的功能。

循環(huán)語句的四個組成部分
  • 初始化部分(init_statement)
  • 循環(huán)條件部分(test_exp)
  • 循環(huán)體部分(body_statement)
  • 迭代部分(alter_statement)
循環(huán)語句分類
  • for 循環(huán)
for (初始化表達式; 布爾值測試表達式; 更改表達式){
    語句或語句塊;
}
  • while 循環(huán)

是先判斷循環(huán)條件,條件為真的時候,去執(zhí)行循環(huán)體。直到false,退出循環(huán)。

[初始化語句]
while (布爾值測試表達式){
    語句或語句塊;
    [更改語句]; 
}
  • do/while 循環(huán)
    先執(zhí)行循環(huán)體,然后在判斷循環(huán)條件。
/*
[初始化語句]
do{
    語句或語句塊;
   [更改語句;]
}while(布爾值測試表達式); */
        
public class WhileLoop {
public static void main(String args[]){
   int result = 0,  i=1;
   do{
        result += i;
         i++;
    }while(i<=100);
         System.out.println("result=" + result);
   }
}  

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

/*編寫程序二:從鍵盤讀入個數(shù)不確定的整數(shù),并判斷讀入的正數(shù)和負數(shù)的個數(shù),輸入為0時結(jié)束程序*/

Scanner scan = new Scanner(System.in);//創(chuàng)建屏幕錄入的接收對象
int a = 0;//正數(shù)個數(shù)
int b = 0;//負數(shù)個數(shù)

for(;;) {
//        while (true) {
    if (scan.hasNextInt()) {
        int receiverInt = scan.nextInt();
        System.out.println(receiverInt);
        if (receiverInt > 0) {
            //+ 正數(shù)
            a++;
        }else if (receiverInt < 0) {
            //- 負數(shù)
            b++;
        }else {
            // == 0
            break;
        }
    }
}
scan.close();
System.out.println("scan end.正數(shù):"+ a + "個;負數(shù):"+ b + "個");

/*編寫程序一:求1到100之間所有偶數(shù)的和。用for和while語句分別完成*/

int sum1 = 0;
for (int i = 1; i <= 100; i++) {
    if (i%2 == 0) {
        sum1 += i;
    }
}
System.out.println("for" + sum1);


int sum2 = 0;
int x = 1;
while (x <= 100) {
    if (x%2 == 0) {
        sum2 += x;
    }
    x++;
}
System.out.println("while" + sum2);

int sum3 = 0;
int y = 1;

do {
    if (y % 2 == 0) {
        sum3 += y;
    }
    y++;
} while (y <= 100);
System.out.println("do-while"+sum3);

2.5.4 嵌套循環(huán)(多重循環(huán))

將一個循環(huán)放在另一個循環(huán)體內(nèi),就形成了嵌套循環(huán)

實質(zhì)上,嵌套循環(huán)就是把內(nèi)層循環(huán)當成外層循環(huán)的循環(huán)體。當只有內(nèi)層循環(huán)的循環(huán)條件為false時,才會完全跳出內(nèi)層循環(huán),才可結(jié)束外層的當次循環(huán),開始下一次的循環(huán)。

設外層循環(huán)次數(shù)為m次,內(nèi)層為n次,則內(nèi)層循環(huán)體實際上需要執(zhí)行m*n=mn次。

2.5.5 特殊的流程控制語句

break
  • 用于終止某個語句塊的執(zhí)行
  • break語句出現(xiàn)在多層嵌套的語句塊中時,可以通過標簽指明要終止的是哪一層語句塊
label1:     {   ……        
label2:     {   ……
label3:         {   ……
                           break label2;
                           ……
                    }
                }
            }
continue
  • continue語句用于跳過某個循環(huán)語句塊的一次執(zhí)行
  • continue語句出現(xiàn)在多層嵌套的循環(huán)語句體中時,可以通過標簽指明要跳過的是哪一層循環(huán)
return

并非專門用于結(jié)束循環(huán)的,它的功能是結(jié)束一個方法。當一個方法執(zhí)行到一個return語句時,這個方法將被結(jié)束。

與break和continue不同的是,return直接結(jié)束整個方法,不管這個return處于多少層循環(huán)之內(nèi)

  1. break只能用于switch語句和循環(huán)語句中。
  2. continue 只能用于循環(huán)語句中。
  3. 二者功能類似,但continue是終止本次循環(huán),break是終止本層循環(huán)。
  4. break、continue之后不能有其他的語句,因為程序永遠不會執(zhí)行其后的語句。
  5. 標號語句必須緊接在循環(huán)的頭部。標號語句不能用在非循環(huán)語句的前面。
  6. 很多語言都有g(shù)oto語句,goto語句可以隨意將控制轉(zhuǎn)移到程序中的任意一條語句上,然后執(zhí)行它。但使程序容易出錯。Java中的break和continue是不同于goto的
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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