流程控制
- 用戶交互Scanner 獲取用戶鍵盤輸入
- 順序結構 程序按順序執行流程
- 選擇結構 if,switch
- 循環結構 for,do while,while
- Break & Continue
- 所有的流程控制語句都可以相互嵌套而互不影響
Scanner
Scanner , java.util.Scanner 是Java5的新特徵,通過此類獲取用戶輸入。
基本語法
Scanner s = new Scanner(System.in)
通過Scanner類的next()和nextLine()方法獲取輸入的字符串,在讀取前我們一般需要使用hashNext()與hashNextLine()判斷是否還有輸入的數據。
next()判斷是否有下一個字符,如遇到空格,則空格後的字符並不會被打印出來;而nextLine()則會打印整行內容。
hashNextInt() 判斷是否輸入爲int型
hashNextFloat() 判斷輸入是否爲float類型
package com.Zh1z3ven.Scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
// 創建一個掃描器對象,用於接收鍵盤數據
Scanner scanner = new Scanner(System.in);
// alt + enter 顯示提示快捷鍵;mac爲option + enter
System.out.println("使用next方式接受:");
// 判斷用戶有沒有輸入字符串
if (scanner.hasNext()){
//使用next接受用戶輸入
String str = scanner.nextLine();
System.out.println("輸出的內容爲:"+str);
}
// 用完scanner後關閉,節省資源,凡是io流,用完後需要關閉,節省資源
scanner.close();
}
}
IDEA獲取structure
Command + 單擊 --> 跟進此類的源碼,點擊Structure可以看此類中的所有方法
if else 判斷語句
通過關係表達式的值判斷,爲true執行if,爲false執行else
if (關係表達式){
語句體;
}else if (關係表達式){
語句體;
}else {
語句體;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入內容:");
String s = scanner.nextLine();
//s.equals 判斷字符串是否相等
if (s.equals("Hello")){
System.out.println(s);
}else {
System.out.println("end");
}
scanner.close();
}
if else if
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入成績:");
int score = scanner.nextInt();
if (score >= 90 && score < 100){
System.out.println("A");
}else if (score >= 80 && score < 90){
System.out.println("B");
}else if (score >= 70 && score < 80){
System.out.println("C");
}else if (score >= 60 && score < 70){
System.out.println("D");
}else if (score >= 0 && score < 60){
System.out.println("不及格");
}else {
System.out.println("輸入的成績有誤");
}
scanner.close();
}
Switch選擇語句
switch格式
switch(表達式) {
case 常量值1:
語句體1;
break;
case 常量值2:
語句體2;
break;
...
default:
語句體n;
break;
}
首先計算出表達式的結果,依次將該結果與case後跟的值進行比較,如果有相等的值則執行相應case中的語句,遇到break跳出switch語句,如果沒有case符合表達式的結果,則執行default中語句。case後的值可以是byte/short/int/char,在javaSE7之後支持String類型,case標籤必須是字符串常量或字面量
JDK7的新特性,表達式的結果可以是字符串
字符的本質還是數字
public static void main(String[] args) {
int weekday = 4;
switch (weekday) {
case 1:
// 這裏case下面不加break會出現case穿透,即沒加break的case都會執行一遍語句體,不管是否匹配表達式
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
default:
System.out.println("輸入參數有誤");
break;
}
}
反編譯
因爲Java程序在執行時會把java文件先編譯爲class文件,而class文件打開是字節碼文件,用文本形式打開是亂碼,這時候就需要反編譯class文件,將其變爲java文件方便我們閱讀。而IDEA就可以做到反編譯。
將我們編譯運行java文件生成的對應的class文件拷貝到上面的程序目錄
public static void main(String[] args) {
String name = "Zh1z3ven";
switch (name){
case "Zh1z3ven":
System.out.println("Zh1z3ven");
break;
default:
System.out.println("輸入有誤");
}
}
這時就可以看到java文件了,這裏機器在處理時利用字符串的hashcode去代替字符串進行判斷。
順序結構
在java中main函數作爲程序主入口,從main函數開始順序執行代碼塊。
for循環
當布爾表達式爲true時循環執行循環體中內容,直到布爾表達式爲false時,結束循環。
關於for循環的說明
最新執行初始化步驟,可以聲明一種類型,但可初始化一個或多個循環控制變量,也可以是空語句。
然後檢測布爾表達式的值。如果爲true,循環體被執行,如果爲false,循環種植,開始執行循環體後面的語句
執行一次循環後,更新循環控制變量(迭代因子控制循環變量的增減)
再次檢索布爾表達式,循環執行上面的過程
for(初始化表達式;布爾表達式;步進表達式){ 循環體;}
public static void main(String[] args) { for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.print(j+"*"+i+"="+j*i+"\t"); } System.out.println(""); } }1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
增強for循環
主要是用來遍歷數組和集合對象的。
Jdk5引入了一種主要用於數組和集合的增強型for循環
聲明語句:聲明新的局部變量,該變量的類型必須和數組元素的類型匹配。其作用域限定在循環語句快,其值與此時數組元素的值相等。
表達式:表達式是要訪問的數組名,或者是返回值爲數組的方法。
for(聲明語句:表達式){ //代碼}
public static void main(String[] args) { int[] numbers = {10, 20, 30, 40, 50}; for (int x:numbers){ System.out.println(x); } }
while循環
當布爾表達式爲true時執行循環體,若永遠爲true則是死循環,可以添加步進表達式控制循環次數,當布爾表達式永真時則爲死循環。所以也需要控制布爾表達式的值,當達到目的後停止while循環。
初始化表達式while(布爾表達式){循環體步進表達式}
public static void main(String[] args) { // 輸出1-100 int i = 0; while (i<100){ i++; System.out.println(i); }
public static void main(String[] args) { // 計算1+2+3+...100 int i = 0; int sum = 0; while (i<100){ i++; sum += i; } System.out.println(sum); }
do-while循環
do-while會先執行一次循環體在去判斷布爾表達式,也就是說無論如何都會執行一次循環體,而while循環,當布爾值爲false直接會跳過循環體不執行。
初始化表達式do{循環體步進表達式}while(布爾表達式);
// do-while會執行一次循環體,而下面的while並不會執行循環體public static void main(String[] args) { int i = 0; int sum = 0; do { i++; sum = sum + i; }while (i<100); System.out.println(sum); }
-
[x] > 控制條件語句所控制的那個變量(比如常用i作控制循環次數的變量),在for循環結束後,就不能再被訪問到了,而while循環結束還可以繼續使用,如果想繼續使用,就用while,否則推薦使用for。原因是for循環結束,該變量就從內存中消失,能夠提高內存的使用效率。
while與do-while區別
break&continue
break
break在任何循環語句的主體部分,均可用break控制循環的流程。break用於強行退出循環,不執行循環中剩餘的語句。(break語句也在switch語句中使用)
continue
contibue語句用在循環語句體中,用於終止某次循環過程,即跳過循環體中尚未執行的語句,接着進行下一次是否執行循環的判定。