Day03-Java流程控制基礎階段
目錄
Scanner物件
-
之前我們學的基本語法中我們並沒有實現程式和人的互動,但是Java給我們提供了這樣一個工具類,為們可以獲取使用者的輸入。java.util.Scanner 是Java5的新特徵,我們可以通過Scanner類來獲取使用者的輸入
-
基本語法
Scanner s = new Scanner(System.in);
-
通過Scanner類的next()與nextLine()方法獲取輸入的字串
-
next():
- 1.一定要讀取到有效字元後才可以結束輸入
- 2.對輸入有效字元之前遇到的空白,next()方法會自動將其去掉
- 3.只有輸入有效字元後才將其後面輸入的空白作為分隔符或者結束符
- 4.next()不能得到帶有空格的字串
-
nextLine():
- 1.以Enter為結束符,也就是說nextLine()方法返回的是輸入回車之前的所有字元
- 2.可以獲得空白
-
凡是屬於IO流的類如果不關閉會一直佔用資源,要養成好習慣,用完就關掉
sacnner.close();
-
小案例:我們可以輸入多個數字,並求其總和與平均數,每輸入一個數字用回車確認,通過輸入非數字來結束並輸出執行結果;
public class Demo { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); double sum = 0; int count = 0; System.out.println("請輸入數字:"); whlie(scanner.hasNextDouble()){ double d = scanner.nextDouble(); count++; sum = sum + x; System.out.println("你輸入了第"+count+"個數據,當前結果為sum = "+sum); } System.out.println(count+"個數的和為"+sum); System.out.println(count+""+(sum/count)); scanner.close(); } }
順序結構
- JAVA的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句執行
- 順序結構是最簡單的演算法結構
- 語句與語句之間,框與框之間是按從上到下的順序進行的,它是由若干個依次執行的處理步驟組成的,它是任何一個演算法都離不開的一種基本演算法結構
選擇結構
if單選擇結構
- 我們很多時候要去判斷一個東西是否可行,然後我們才去執行,這樣一個過程在程式中用if語句來表示
-
語法結構
if(布林表示式){ //如果布林表示式為true將執行的語句 }
if雙選擇結構
- 現在有個需求,公司要收購一個軟體,成功了,給人支付100w元,失敗了,自己找人開發。這樣的需求用一個if就搞不定了,我們需要有兩個判斷,需要一個雙選擇結構,所以就有了if-else結構
-
語法結構:
if(布林表示式){ //如果布林表示式的值為true } else{ //如果布林表示式的值為false }
-
上述案例程式碼如下
public class IfDemo{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); if(s.equals("true")){ System.out.println("收購成功,每人獎勵100W!"); }else{ System.out.println("收購失敗,自主開發軟體"); } scanner.close(); } }
if多選擇結構
-
在生活中我們很多時候的選擇也不僅僅只有兩個,所以我們需要一個多選擇結構來處理這類問題
-
語法結構:
if(布林表示式1){ //如果布林表示式1的值為true執行程式碼 }else if(布林表示式2){ //如果布林表示式2的值為true執行程式碼 }else if(布林表示式3){ //如果布林表示式3的值為true執行程式碼 }else{ //如果以上布林表示式都不為true執行程式碼 }
-
案例
public class IfDemo03 { public static void main(String[] args) { //考試分數大於60分及格,小於60不及格 Scanner scanner = new Scanner(System.in); System.out.println("請輸入成績:"); int score = scanner.nextInt(); if (score==100){ System.out.println("恭喜滿分"); }else if(score<100 && score>=90){ System.out.println("a"); }else if(score<90 && score>=80){ System.out.println("b"); }else if(score<80 && score>=70){ System.out.println("c"); }else if(score<70 && score>=60){ System.out.println("d"); }else if(score<60 && score>=0){ System.out.println("不及格"); }else{ System.out.println("成績不合法"); } scanner.close(); } }
巢狀的if結構
-
使用巢狀的if...else語句是合法的,也就是說你可以在另一個if或者else if語句中使用if或者else if語句,你可以像if語句一樣巢狀else if...else
-
語法結構
if(布林表示式1){ //如果布林表示式1的值為true執行程式碼 if(布林表示式2){ //如果布林表示式2的值為true執行程式碼 } }
-
思考?我們需要尋找一個數,在1--100之間
switch多選擇結構
-
多選擇結構還有一個實現方式就是switch case語句
-
switch case語句判斷一個變數與一系列值中某一個值是否相等,每一個值稱為一個分支
-
語法結構
switch(expression){ case value: //語句 break;//可選 case value: //語句 break; //你可以有任意數量的case語句 default://可選 //語句 }
-
switch語句中的變數型別可以是:
- byte、short、int或者char
- 從java se 7開始switch支援字串String型別了
- 同時case標籤必須為字串常量或字面量
迴圈結構
while迴圈
-
while是最基本的迴圈
-
語法結構
while(布林表示式){ //迴圈內容 }
-
只要布林表示式為true,迴圈就會一直執行下去
-
我們大多數情況下是會讓迴圈停止下來的,我們需要一個讓表示式失效的方式來結束迴圈
-
少部分情況需要迴圈一直執行,比如伺服器的請求響應監聽等
-
迴圈條件一直為true就會造成無限迴圈[死迴圈],我們正常的業務程式設計中應該儘量避免死迴圈。會影響程式效能或者造成程式卡死崩潰!
-
思考:計算1+2+3+.......+100=?
public class WhileDemo{ public static void main(String[] args){ int sum = 0; int count = 1; while(count<=100){ sum = sum + count; count++; } System.out.println(sum); } }
do...while迴圈
-
對於while語句而言,如果不滿足條件,則不能進入迴圈。但有時候我們需要即使不滿足條件也至少迴圈一次
-
do......while迴圈和while迴圈相似,不同的是,do.....while迴圈至少會執行一次。
-
語法格式
do{ //程式碼語句 }while(布林表示式);
-
while和do...while的區別:
- while先判斷後執行,dowhile是先執行後判斷!
- dowhile總是保證迴圈體會被至少執行一次
for迴圈
-
雖然所有迴圈結構都可以用while或者do......while表示,但JAVA提供了另一種語句——for迴圈,使得一些迴圈結構變得更加簡單
-
for迴圈語句是支援迭代的一種通用結構,是最有效、最靈活的迴圈結構
-
for迴圈執行的次數實在執行前就確定的,語法格式如下:
for(初始化;布林表示式;更新){ //程式碼語句 }
練習
-
練習1:計算0到100之間的奇數和偶數的和
public class ForDemo01 { public static void main(String[] args) { int sum1 = 0; int sum2 = 0; for (int count = 1;count<=100;count++){ if (count%2==0){ sum1 = sum1+count; }else{ sum2 = sum2+count; } } System.out.println("偶數的和為:"+sum1); System.out.println("奇數的和為:"+sum2); } }
-
練習2:用while或for迴圈輸出1-1000之間能被5整除的數,並且每行輸出3個
public class ForDemo02 { public static void main(String[] args) { int flag = 0; for (int count = 1;count<=1000;count++){ if (count%5==0){ System.out.print(count+"\t"); flag++; if(flag==3){ System.out.println(); flag = 0; } } } } }
-
練習3:列印九九乘法表
public class ForDemo03 { public static void main(String[] args) { for (int i = 1;i<=9;i++){ for (int j = 1;i>=j;j++){ System.out.print(i+" * "+j+" = "+(i*j)+"\t"); } System.out.println(); } } }
-
練習4:列印三角形
public class TestDemo { //列印三角形 5行 public static void main(String[] args) { 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(); } } }
-
拓展:列印菱形
public class TestDemo { //列印三角形 5行 public static void main(String[] args) { 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(); } for (int i = 1;i<=7;i++){ for (int j =1;j<i;j++){ System.out.print(" "); } for (int j=7;j>i;j--){ System.out.print("*"); } for (int j=6;j>i;j--){ System.out.print("*"); } System.out.println(); } } }
-
在Java5中引入了一種主要用於陣列的增強型for迴圈
-
暫時瞭解,陣列之後才會重點使用
-
Java5引入了一種主要用於陣列或集合的增強型for迴圈
-
Java增強for迴圈語法格式如下:
for(宣告語句:表示式){ //程式碼句子 }
-
宣告語句: 宣告新的區域性變數,該變數的型別必須和陣列元素的型別匹配。其作用域限定在迴圈語句塊,其值與此時陣列元素的值相等
-
表示式:表示式是要訪問的陣列名,或者是返回值為陣列的方法
break continue
- break在任何迴圈語句的主體部分,均可用break控制迴圈的流程。break用於強行退出迴圈,不執行迴圈中剩餘的語句(break語句也在switch語句中使用)
- continue語句用在迴圈語句中,用於終止某次迴圈過程,即跳過迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判斷
- 關於goto關鍵字
- goto關鍵字很早就在程式設計語言中出現,儘管goto仍是Java的一個保留字,但並未在語言中得到正式使用;Java沒有goto,然而,在break和continue這兩個關鍵字的身上,我們仍然能看出一些goto的影子---帶標籤的break和continue
- "標籤"是指後面跟一個冒號的識別符號,例如:label:
- 對Java來說唯一用到標籤的地方是在迴圈語句之前,而在迴圈之前設定標籤的唯一理由是:我們希望在其中巢狀另一個迴圈,由於break和continue關鍵字通常只中斷當前迴圈,但若隨同標籤使用,它們就會中斷到存在標籤的地方