Java 基本語法----流程控制
流程控制
選擇結構(分支語句)
分支語句根據一定的條件有選擇地執行或跳過特定的語句
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 = newTestAge(); 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 基本語法----流程控制