Java的程序控制結構與C語言一致,分為順序結構、選擇結構(分支結構)和循環結構三種。
一、順序結構
如果程序不包含選擇結構或是循環結構,那么程序中的語句就是順序的逐條執行,這就是順序結構。
import java.util.Scanner;
public class SequenceConstruct{public static void main(String[] args){//以下就使程序的順序結構//語句是從上到下逐個執行的,沒有跳轉int a = 10;char b = 'a';double c = 1.23;String str = "";Scanner scanner = new Scanner(System.in);System.out.print("請輸入一句話:");str = scanner.next();System.out.println(str);}}
二、選擇結構
1. if-else
在if-else分支結構中,else會與上方最近的if匹配。
1.1 單分支
//單分支
import java.util.Scanner;
public class SelectConstruct01{public static void main(String[] args){String str = "";System.out.println("請輸入一個名字:");Scanner scanner = new Scanner(System.in);str = scanner.next();if("jack".equals(str))System.out.println("你輸入的名字是jack");}}
1.2 雙分支
import java.util.Scanner;public class SelectConstruct02{public static void main(String[] args){//雙分支//System.out.print("請輸入你的名字:");Scanner scanner = new Scanner(System.in);String name = scanner.next();if("jack".equals(name))System.out.println("你的名字是jack");elseSystem.out.println("你的名字不是jack");}}
1.3 多分支
import java.util.Scanner;public class SelectConstruct03{public static void main(String[] args){//多分支//輸入保國同志的芝麻信用分:// 如果:// 1) 信用分為 100 分時,輸出 信用極好;// 2) 信用分為(80,99]時,輸出 信用優秀;// 韓順平循序漸進學 Java 零基礎// 第 100頁// 3) 信用分為[60,80]時,輸出 信用一般;// 4) 其它情況 ,輸出 信用 不及格// 5) 請從鍵盤輸入保國的芝麻信用分,并加以判斷Scanner scanner = new Scanner(System.in);System.out.println("請輸入信用分:");int score = scanner.nextInt();if(score > 100 || score < 0)System.out.println("信用分輸入有誤!");else if(score == 100)System.out.println("信用極好");else if(score > 80)System.out.println("信用優秀");else if(score >= 60)System.out.println("信用一般");elseSystem.out.println("信用不及格");}}
1.4 嵌套分支
import java.util.Scanner;public class SelectConstruct04{public static void main(String[] args){//嵌套分支//在一個分支結構中嵌套了另一個分支結構//參加歌手比賽,如果初賽成績大于 8.0 進入決賽,否則提示淘汰。//并且根據性別提示進入男子組或女子組。Scanner scanner = new Scanner(System.in);System.out.print("請輸入初賽成績:");double score = scanner.nextDouble();System.out.print("請輸入性別:");char sex = scanner.next().charAt(0);if(score > 8.0)if(sex == '男')System.out.println("進入男子組");else if(sex == '女')System.out.println("進入女子組");elseSystem.out.println("性別輸入有誤");elseSystem.out.println("淘汰");}}
2. switch
- switch括號中的表達式結果類型必須是(byte,short,int,char,enum,String)中的一種。
- case后的常量類型必須與switch括號中表達式結果的類型一致,或是可以自動轉換(switch括號中的類型轉換成case關鍵字后的類型)成可以比較的類型。
- case后必須是常量,不能是變量。
- default是可選的。
- break用于跳出當前switch語句塊,如果沒有break關鍵字,那么就會發生穿透,語句會一直執行到switch語句塊的末尾或是遇到break。
import java.util.Scanner;
public class SwitchStructrue{public static void main(String[] args){Scanner scanner = new Scanner(System.in);boolean flag = true;while(flag){System.out.println("輸入1表示退出循環:");if(scanner.nextInt() == 1){flag = false;continue;}System.out.print("輸入一個字符(a-g):");char input = scanner.next().charAt(0);switch(input){case 'a':System.out.println("Monday");break;case 'b':System.out.println("Tuesday");break;case 'c':System.out.println("Wensday");break;case 'd':System.out.println("Thursday");break;case 'e':System.out.println("Friday");break;case 'f':System.out.println("Saturday");break;case 'g':System.out.println("Sunday");break;default:System.out.println("error,please input again");} } }
}
3. switch與if-else的比較
- 如果判斷的數值不多,并且是固定不變的,例如星期、月份等內容,推薦使用switch。
- 對區間的判斷,結果為boolean類型的判斷等,使用if-else。
三、循環結構
1. for循環
for循環的結構:for(循環變量初始化;循環條件;循環變量迭代){循環體}.可以一次性初始化多個變量(用逗號隔開),但是它們的類型要一致,循環變量的迭代處也可以有多條語句(用逗號隔開)。
public class ForStructrue{public static void main(String[] args){for(int i = 1; i <= 9; i++){for(int j = 1; j <= i; j++){String str = j + "*" + i + " = " + i * j;System.out.print(str + " ");}System.out.println();}}
}
2. while循環
while循環的結構:while(循環條件){循環體}.
public class WhileStructrue{public static void main(String[] rags){int i = 1, j = 1;while(i <= 9){j = 1;while(j <= i){System.out.print(j+"*"+i+"="+i*j+" ");j++;}System.out.println();i++;}}
}
3. dowhile循環
dowhile循環與while循環基本一樣,除了當初始條件不滿足時,dowhile會執行一次,而while一次都不會執行。注意while括號后有分號。
public class DoWhileStructrue{public static void main(String[] args){boolean flag = false;while(flag){System.out.println("This is while");}do{System.out.println("This is dowhile");}while(flag);}
}
4. 多重循環
多重循環就是一層循環為另一個循環的循環體,打印乘法表就需要使用多重循環來完成,下面使用多重循環打印金字塔。
import java.util.Scanner;
public class MulCirculation{public static void main(String[] args){System.out.println("輸入要打印的金字塔規模:");Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();for(int i = 1; i <= num; i++){int j = 0;while(j < num - i){System.out.print(" ");j++;}for(j = 0; j < 2 * i - 1; j++){System.out.print("*");}System.out.println();}}
}
5. break關鍵字
用于跳出當前層循環語句或跳出switch語句塊。可以使用標簽來指定跳出哪一層循環(盡量不要使用標簽)。
public class BreakTest{public static void main(String[] args){for(int i = 1; i <= 100; i++){if(i == 49) break;System.out.print(i + " ");}System.out.println();for(int i = 1; i <= 5; i++){for(int j = 1; j <= 5; j++){if(j == i) break;System.out.print(i*j+" ");}System.out.println();}circulation1:for(int i = 1; i <= 10; i++){circulation2:for(int j = 1; j <= 3; j++){circulation3:for(int k = 1; k <= 3; k++){if(i == 1){break circulation2;}System.out.println("i = " + i + " j = " + j + " k = " + k);if(i == 3) break circulation1;}}}}
}
6. continue關鍵字
用于跳過本次迭代時continue關鍵字之后的所有語句,并進行下一次迭代,但不會跳過for循環中循環變量的迭代語句。可以使用標簽指定層次。
public class ContinueTest{public static void main(String[] args){for(int i = 1; i <= 3; i++){for(int j = 1; j <= 3; j++){if(i == j) continue;System.out.print("i = " + i + " j = " + j + " ");}System.out.println();}circulation1:for(int i = 1; i <= 3; i++){circulation2:for(int j = 1; j <= 3; j++){circulation3:for(int k = 1; k <= 3; k++){if(i == 2) continue circulation1;if(j == 1) continue circulation2;System.out.print("i = " + i + " j = " + j + " k = " + k + " ");}System.out.println();}}}
}
7. return關鍵字
return關鍵字用于跳出所在方法。
public class ReturnTest{public static void main(String[] args){int i = 1;while(i <= 10){if(i == 6) return;System.out.println("i = " + i++);}System.out.println("在main方法中");}
}