1. 程式人生 > >Java 基本語法----流程控制

Java 基本語法----流程控制

輸出 byte 子句 枚舉 整數 back code 情況 system.in

流程控制

選擇結構(分支語句)

分支語句根據一定的條件有選擇地執行或跳過特定的語句
Java分支語句分類
  if-else 語句
  switch 語句
if-else語句語法格式

if(布爾表達式){
    語句或語句塊;
}
if(布爾表達式) {
    語句或語句塊;
} 
else if(布爾表達式){
    語句或語句塊;
}else {
    語句或語句塊;
}

if-else語句應用舉例

 1 public class TestAge{
 2   public static void main(String args[]){
 3       TestAge t = new
TestAge(); 4    t.age(75); 5   } 6   public void age(int age){ 7   if (age< 0) { 8    System.out.println("不可能!"); 9   }else if(age>250){ 10    System.out.println("是個妖怪!"); 11   }else { 12    System.out.println("此人芳齡 " + age); 14   } 15 }

 1 //若 age <= 8, 打印 "沒上學"
 2 //若 age <= 14, 打印出 "小學生" 
3 //若 age <= 17, 打印 "初中生" 4 //若 age <= 20, 打印 "高中生" 5 //若 age <= 24, 打印 "大學生" 6 //若都不滿足, 打印 "大學畢業" 7 8 int age = 5; 9 10 if(age <= 8) { 11 System.out.println("沒上學"); 12 } 13 if(age <= 14) { 14 System.out.println("小學生"); 15 }else if(age <= 17){ 16 System.out.println("初中學");
17 }else if(age <= 20){ 18 System.out.println("高中生"); 19 }else if(age <= 24){ 20 System.out.println("大學生"); 21 }else{ 22 System.out.println("大學畢業"); 23 }


if語句練習

1、編寫程序:由鍵盤輸入三個整數分別存入變量num1、num2、num3,對它們進行排序(使用 if-else if-else),並且從小到大輸出。

 1     System.out.println("請輸入三個整數.");
 3     Scanner scanner = new Scanner(System.in);    
 4 
 5     System.out.print("num1=");
 6     int num1 = scanner.nextInt();
 7         
 8     System.out.print("num2=");
 9     int num2 = scanner.nextInt();
10         
11     System.out.print("num3=");
12     int num3 = scanner.nextInt();
13         
14     System.out.println("您輸入的三個整數分別為: " + num1 + ", " + num2 + ", " + num3);
15         
16     if(num1 <= num2){
17         if(num3 <= num1){
18             System.out.println(num3 + ", " + num1 + ", " + num2);
19         }else if(num3 >= num2){
20             System.out.println(num1 + ", " + num2 + ", " + num3);
21         }else{
22             System.out.println(num1 + ", " + num3 + ", " + num2);    
23         }
25     }else{    
26         if(num3 <= num2){
27             System.out.println(num3 + ", " + num2 + ", " + num1);
28         }else if(num3 >= num1){
29             System.out.println(num2 + ", " + num1 + ", " + num3);
30         }else{
31             System.out.println(num2 + ", " + num3 + ", " + num1);    
32         }    
33     }

2、對下列代碼,若有輸出,指出輸出結果。

 1 int x=2;
 2 int y=3;
 3 if(x>2) {    
 4     if(y>2) {    
 5         int z=x+y;
 6         System.out.println("z is " + z);
 7     }
 8 }else {
 9     System.out.println("x is " + x);
10 }

switch語句語法格式

switch(表達式){
    case 常量1:
        語句1;
        break;
    case 常量2:
        語句2;
        break;
    case 常量N:
        語句N;
        break;
    [default:
        語句;
        break;]
 } 


switch語句應用舉例

 1 public class Test{
 2     public static void main(String args[]){
 3         int i = 1;
 4         switch (i) {
 5             case 0:
 6                 System.out.println("zero");
 7                 break;
 8             case 1:
 9             System.out.println("one");
10             //break;
11         default:
12                 System.out.println("default");
13             break;
14        }
15    }
16 }

switch語句有關規則


switch(表達式)中表達式的返回值必須是下述幾種類型之一:int, byte, char, short, 枚舉, 字符串;
case子句中的值必須是常量,且所有case子句中的值應是不同的;
default子句是任選的;
break語句用來在執行完一個case分支後使程序跳出switch語句塊;

switch語句練習

1、使用switch語句改寫下列if語句:

 1 /*
 2     int a = 3;
 3     int x = 100;
 4     if(a==1)
 5         x+=5;
 6     else if(a==2)
 7         x+=10;
 8     else if(a==3)
 9         x+=16;
10     else if(a==4)
11         x+=34;
12 */
13          
14     int a = 3;
15     int x = 100;
16          
17     switch(a){
18         case 1:
19             x += 5;
20             break;
21         case 2:
22             x += 10;
23             break;
24         case 3:
25             x += 16;
26             break;
27         case 4:
28             x += 34;
29             break;
30         }     
31     System.out.println(x);                

2、編寫程序:從鍵盤上讀入一個學生成績,存放在變量score中,根據score的值輸出其對應的成績等級:

  score>=90 等級:A

  70=<score<90 等級: B

  60=<score<70 等級: C

  score<60 等級:D

 1 /*
 2     編寫程序:從鍵盤上讀入一個學生成績,存放在變量score中,根據score的值輸出其對應的成績等級:
 3     score>=90           等級:A
 4     70=<score<90     等級: B
 5     60=<score<70     等級: C
 6     score<60              等級:D
 7 */
 8     Scanner scanner = new Scanner(System.in);
 9     System.out.print("請輸入學生的學習成績, score=");
10     int score = scanner.nextInt();
11         
12     switch(score/10){
13         case 10:
14         case 9:
15             System.out.println("A");
16             break;
17             
18         case 8:
19         case 7:
20             System.out.println("B");
21             break;
22                 
23         case 6:
24             System.out.println("C");
25             break;
26                 
27         default:
28             System.out.println("D");
29     }

3、輸入 2017 年的某個月份和日期, 例如 month=4, day=21
  經過程序計算, 打印出輸入的月份和日期是 2017 年的第幾天. 31+28+31+21

 1 /*
 2  * 輸入 2017 年的某個月份和日期, 例如 month=4, day=21
 3  * 經過程序計算, 打印出輸入的月份和日期是 2017 年的第幾天.  31+28+31+21
 4  */
 5     System.out.print("month:");
 6     int month = scanner.nextInt();
 7         
 8     System.out.print("day:");
 9     int day = scanner.nextInt();
10         
11     int days = day;
12         
13     switch(month - 1) {
14         case 11:
15         days += 30;
16         case 10:
17         days += 31;
18         case 9:
19         days += 30;
20             
21         case 8:
22         days += 31;
23         case 7:
24         days += 31;
25         case 6:
26             days += 30;
27         case 5:
28         days += 31;
29             
30         case 4:
31         days += 30;
32         case 3:
33         days += 31;
34         case 2:
35         days += 28;
36         case 1:
37             days += 31;
38     }
39     System.out.println(month + "月" + day + "日是 2017 年的第" + days + "天");     

循環結構

循環語句功能
在循環條件滿足的情況下,反復執行特定代碼
循環語句的四個組成部分
  初始化部分(init_statement)
  循環條件部分(test_exp)
  循環體部分(body_statement)
  叠代部分(alter_statement)


循環語句分類


for 循環
while 循環
do/while 循環


for 循環語句


語法格式

for (初始化表達式; 布爾值測試表達式; 更改表達式){
  語句或語句塊;

for循環執行步驟

技術分享


應用舉例

public class ForLoop {
    public static void main(String args[]){
        int result = 0;
        for(int i=1; i<=100; i++) {
            result += i;
        }
        System.out.println("result=" + result);
    }
}

for語句練習

1、從 1 打印到 100;打印 1-100 之間的所有偶數

 1 public class TestFor {
 2     public static void main(String [] args) {    
 3     //從 1 打印到 100
 4     /*
 5     for(int i = 1; i <= 100; i++) {    
 6         System.out.println(i);
 7     }
 8     */
 9         
10     //循環的初始化
11     int i = 1;
12     for(;i <= 100;) {
13         System.out.println(i++);
14     }
15     //打印 1-100 之間的所有偶數. 
16     for(int j = 1; j <= 100; j++) {
17         if(j % 2 == 0){
18             System.out.println(j);
19         }
20     }
21 }        


2、編寫程序FooBizBaz.java,從1循環到150並在每行打印一個值,另外在每個3的倍數行上打印出“foo”,在每個5的倍數行上打印“biz”,在每個7的倍數行上打印輸出“baz”。

for(int j = 1; j <= 150; j++){
    System.out.print(j);
    if(j % 3 == 0){
        System.out.print(" foo");
    }
    if(j % 5 == 0){
        System.out.print(" biz");
    }
    if(j % 7 == 0){
        System.out.print(" baz");
    }
    System.out.println();
}

效果:

1
2
3 foo
4
5 biz
6 foo
7 baz

15 foo biz
….
105 foo biz baz

3、打印 1-100 之間的所有素數素數: 有且僅有兩個正約數的整數. 即 2 ~ i-1 之間沒有一個是其約數. 例如 2, 3, 5, 7, 11, ...

 1 public class sushu {
 2     public static void main(String[] args) {
 3     //打印 1-100 之間的所有素數
 4     //素數: 有且僅有兩個正約數的整數. 即 2 ~ i-1 之間沒有一個是其約數. 
 5     //例如 2, 3, 5, 7, 11, ...
 6     //標記一個整數是素數. true 表示是一個素數, false 表示不是素數. 
 7     boolean flag = true;
 8         
 9     long begin = System.currentTimeMillis();
10         
11     for(int i = 2; i <= 100000; i++){    
12         flag = true;
13             
14         /**
15          * 16
16          * 
17          * 2  8
18          * 3
19          * 4  4
20          * 5 
21          * 7
22          * 8  2
23          */
24             
25         //從 2 循環到 i-1, 檢驗每一個數是否為 i 的約數.  
26         for(int j = 2; j <= Math.sqrt(i); j++){
27             if(i % j == 0){
28                 flag = false;
29             //結束這次循環. 
30             break;
31             }
32         }
33         if(flag){ 
34                 System.out.println(i);
35         }    
36     }
37     long end = System.currentTimeMillis();
38     System.out.println("time: " + (end - begin)); //2194   98
39 }

while 循環語句

語法格式
[初始化語句]
while( 布爾值測試表達式){
  語句或語句塊;
  [更改語句;]
}
應用舉例

 1 public class WhileLoop {
 2     public static void main(String args[]){
 3         int result = 0;
 4         int i=1;
 5         while(i<=100) {
 6             result += i;
 7             i++;
 8         }
 9         System.out.println("result=" + result);
10     }
11 }    


do/while 循環語句

語法格式
[初始化語句]
do{
  語句或語句塊;
  [更改語句;]
}while(布爾值測試表達式);


應用舉例

 1 public class WhileLoop {
 2     public static void main(String args[]){
 3         int result = 0, i=1;
 4         do{
 5             result += i;
 6             i++;
 7         }while(i<=100);
 8         System.out.println("result=" + result);
 9     }
10 } 

while、do/while語句練習

    int i = 101;
    while(i <= 100){
        System.out.println(i);
    i++;
    }
        
    //do ... while 一定會執行一次循環體. 
    int j = 101;
    do{
    System.out.println("^^" + j++);
    }while(j <= 100);


1、編寫程序:求1到100之間所有偶數的和。用for和while語句分別完成。

    /*
    求1到100之間所有偶數的和。用for和while語句分別完成。
    */
    int total = 0;
    int m = 1;
    while(m <= 100){
        if(m % 2 == 0){
        total += m;
    }
    m++;
    }
    System.out.println(total);    


2、編寫程序:從鍵盤讀入個數不確定的整數,並判斷讀入的正數和負數的個數,輸入為0時結束程序。

/*
從鍵盤讀入個數不確定的整數,並判斷讀入的正數和負數的個數,輸入為0時結束輸入。
*/
    Scanner scanner = new Scanner(System.in);
        
    //標記正數的個數
    int x = 0;
    //標記負數的個數
    int y = 0;
        
    while(true){        
        int b = scanner.nextInt();
        if(b > 0){
            x++;
        }else if(b < 0){
            y++;
            }else{
            //退出循環使用 break 語句. 
            break;    
        }
    }
    System.out.println("正數: " + x);
    System.out.println("負數: " + y)

特殊流程控制語句


break 語句


break語句用於終止某個語句塊的執行
{ ……
  break;
  ……
}
break 語句用法舉例

public class TestBreak{
    public static void main(String args[]){
        for(int i = 0; i<10; i++){ 
            if(i==3)
                break;    
                System.out.println(" i =" + i);
        }
        System.out.println("Game Over!");
    }
}

break語句出現在多層嵌套的語句塊中時,可以通過標簽指明要終止的是哪一層語句塊
label1: { ……
  label2: { ……
    label3: { ……
      break label2;
    ……
    }
  }
}

continue 語句


continue語句用於跳過某個循環語句塊的一次執行
continue語句出現在多層嵌套的循環語句體中時,可以通過標簽指明要跳過的是哪一層循環


continue語句用法舉例

 1 public class ContinueTest{
 2     public static void main(String [] args){
 3         
 4     //continue語句用於跳過某個循環語句塊的一次執行 
 5     for(int i = 1; i <= 100; i++){
 6         if(i % 2 != 0){        
 7         //break和continue之後不能有其他的語句,
 8         //因為程序永遠不會執行break 和 continue之後的語句。
 9         continue;        
10         System.out.println("test");
11     }    
12     System.out.println(i);
13     }
14 }

特殊流程控制語句說明


break只能用於switch語句和循環語句中
continue 只能用於循環語句中。
標號語句必須緊接在循環的頭部。標號語句不能用在非循環語句的前面。
break和continue之後不能有其他的語句,因為程序永遠不會執行break 和 continue之後的語句。

Java 基本語法----流程控制