# 狂神說Java學習筆記 : Java流程控制 *** > **即使再小的帆也能遠航** >**本篇學習筆記參考自[狂神說](https://www.bilibili.com/video/BV12J41137hu/)** >###### tags: `狂神說Java` `Java基礎` *** # 用戶交互Scanner * 基本語法 ```java Scanner s = new Scanner(System.in); ``` * 凡是屬於IO流的類,如果不關閉會一值占用資源,要養成好習慣,用完就關 * scanner.close() ## Next 與 NextLine 差異 * NextLine 較常用 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f1ca81202bcb4a82893368fea844867e.png#pic_left =x225) *** # 選擇結構 ## if 單選擇結構 ```java if (boolean){ // TODO } ``` * equals 用來判斷字符串是否相等,與"=="有差異 ## if 雙選擇結構 ```java if (boolean){ //True, TODO }else{ //False, TODO } ``` ## if 多選擇結構 ```java if (boolean){ //TODO }else if(boolean){ //TODO }else if(boolean){ //TODO }else{ //TODO } ``` *** ## Switch 選擇結構 ```java switch(expression){ case value : // 語句 break; case value : // 語句 break; default : // 語句 } ``` * Java SE7 開始,Switch支持字符串比較 * **反編譯 :** * java - - - class (字節碼文件) - -(反編譯,IDEA)- - * VSCode需另外下載[套件](https://www.cnblogs.com/novice77/p/14566410.html),.class生成位置可參考此[連結](https://blog.csdn.net/u013366617/article/details/90299278) ![](https://i.imgur.com/BDj00oU.png) --- # 循環結構 ## While 循環 ``` java while(boolean){ // TODO } ``` ## Do...While 循環 - 與while主要差異 - While 先判斷後執行 - Do while 先執行後判斷 - **Do while 至少執行一次** ```java do{ //TODO }while(boolean) ``` ## **For 循環** - **最有效、最靈活**的運算結構 ```java for(初始化;Boolean;更新){ //TODO } ``` - 補充: For死循環 ```java for( ; ; ){ } ``` ### Practice 1 : 計算0~100,奇數和偶數的和 ``` java= public class ForDemo02 { public static void main(String[] args) { // Practice 1: 計算0~100,奇數和偶數的和 int oddSum = 0; int evenSum = 0; for (int i = 0; i <= 100; i++) { if (i%2 != 0) { oddSum += i; }else{ evenSum += i; } } System.out.println("Odd sum = "+ oddSum); System.out.println("Even sum = "+ evenSum); } } ``` ### Practice 2 : 用 while 或 for 循環輸出1-1000之間能被5整除的數,並且每行輸出3個 - **For (by 狂神)** ```java= public class ForDemo03 { public static void main(String[] args) { // 用 while 或 for 循環輸出1-1000之間能被5整除的數,並且每行輸出3個 for (int i = 1; i <= 1000; i++) { if (i%5 == 0) { System.out.print(i + "\t"); } if (i%(5*3) == 0) { System.out.println(); // System.out.print("\n"); } } } } ``` - **While** ```java= public class ForDemo03_1 { public static void main(String[] args) { // 用 while 或 for 循環輸出1-1000之間能被5整除的數,並且每行輸出3個 int i = 1; while (i <= 1000) { if (i%5 == 0) { System.out.print(i + "\t"); } if (i%(5*3) == 0) { System.out.println(); // System.out.print("\n"); } i++; } } } ``` ### Practice 3 : 打印九九乘法表 - 格式 ![](https://i.imgur.com/67J5pLc.jpg) - Code ```java= package structure; public class ForDemo04 { public static void main(String[] args) { // 打印九九乘法表 // 1. 先打印第一列 // 2. 把固定的部分再用一個循環包起來 // 3. 去掉重複項, j <= i // 4. 調整樣式 for (int i = 1; i < 10; i++) { for (int j = 1 ; j <= i; j++){ System.out.print(j+"*"+i+"=" + (i*j) + "\t"); } System.out.println(); } } } ``` ## 增強 For 循環 - 這裡只先提概念,之後數組會在重點使用。 - JDK5引入,主要用於**數組**和**集合** ```java for(聲明語句 : 表達式){ //TODO } ``` - 實例 ``` java= public class ForDemo05 { public static void main(String[] args) { int[] numbers = {10,20,30,40,50}; // 定義了一個數組 for (int i = 0; i<5; i++){ System.out.println(numbers[i]); } System.out.println("=========="); // 遍歷數組的元素 for (int x:numbers){ System.out.println(x); } } } ``` *** # Break & Continue & Goto - 生動比喻 : - Break : 不幹了 - Continue : 請假一次 - Goto - Java沒有"goto" - 概念類似飛雷神,但是會破壞循環結構,因此不使用 - Html, php會用這東西 - 以下示範,但不建議使用 ```java= public class LabelDemo { public static void main(String[] args) { // 打印101~150之間的質數 //不建議使用 outer:for (int i = 101; i < 150; i++) { for (int j = 2; j < i/2; j++) { if (i%j == 0){ continue outer; } } System.out.print(i+" "); } } } ``` *** # 練習 : 打印三角形及Debug - 核心概念 : 將三角形拆成四個區域,並個別處理 ```java= public class TestDemo { public static void main(String[] args) { // 打印三角形 5行 for (int i = 1; i <= 5; i++) { for (int j = 5; j > i; j--) { System.out.print(" "); } for (int j = 1; j <= i; j++) { System.out.print("*"); } for (int j = 1; j < i; j++) { System.out.print("*"); } System.out.println(); } } } ```