1-002-Java流程控制筆記
使用者互動Scanner
java.util.Scanner是Java5的新特徵,可以通過Scanner類來獲取使用者的輸入
基本語法:
Scanner s = new Scanner(System.in)
next():
package com.king.scanner;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
//建立一個掃描器物件,用於接收鍵盤資料
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判斷使用者有無輸入字串
if(scanner.hasNext()){
//使用next方式接收
String str = scanner.next();//程式會等待使用者輸入完畢
System.out.println("輸入的內容為"+str);
}
//凡是屬於IO流的類如果不關會一直佔用資源,要養成用完就關的習慣
scanner.close();
}
}
輸入hello world!輸出為hello
nextLine():
package com.king.scanner;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//從鍵盤接收資料
System.out.println("使用nextLine方式接收:");
//判斷是否還有輸入
if (scanner.hasNextLine()){
String str = scanner.nextLine();
System.out.println("輸出的內容為"+str);
}
scanner.close();
}
}
輸入hello world!輸出為hello world!
-
next():
-
一定要讀取到有效字元後才可以結束輸入
-
對輸入有效字元之前遇到的空白,next()方法會自動將其去掉
-
只有輸入有效字元後才將其後面輸入的空白作為分隔符或者結束符
-
next()不能得到帶有空格的字串
-
-
-
nextLine()
-
以Enter為結束符,也就是說nextLine()方法返回的是輸入回車之前的所有字元
-
可以獲得空白
-
不判斷直接讀取:
package com.king.scanner;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//從鍵盤接收資料
System.out.println("使用nextLine方式接收:");
String str = scanner.nextLine();
System.out.println("輸出的內容為"+str);
scanner.close();
}
}
案例:
輸入多個數字,求其總和和平均數,每輸入一個數字用回車確認,通過輸入非數字來結束輸入並輸出執行結果
package com.king.scanner;
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
//輸入多個數字,求其總和和平均數,每輸入一個數字用回車確認,通過輸入非數字來結束輸入並輸出執行結果
Scanner scanner = new Scanner(System.in);
//和
double sum = 0;
//計算輸入了多少個數字
int m = 0;
//通過迴圈判斷是否還有輸入,並在裡面對每一次進行求和和統計
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
m = m + 1;//m++;
sum = sum + x;
System.out.println("你輸入了第" + m + "個數據,當前結果sum=" + sum);
}
System.out.println(m + "個數的和為:" + sum);
System.out.println(m + "個數的平均值為" + (sum / m));
}
}
順序結構
Java的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句執行。
順序結構是最簡單的演算法結構
由若干個依次執行的處理步驟組成,它是任何一個演算法都離不開的基本演算法結構
選擇結構
if單選擇結構
if(布林表示式){
//如果布林表示式true將執行的語句
}
if雙選擇結構
if(布林表示式){
//如果布林表示式true將執行的語句
}else{
//如果布林表示式false將執行的語句
}
if多選擇結構
if(布林表示式 1){
//如果布林表示式 1 true將執行的語句
}else if(布林表示式 2){
//如果布林表示式 2 true將執行的語句
}else if(布林表示式 3){
//如果布林表示式 3 true將執行的語句
}else{
//如果以上布林表示式都不為true將執行的語句
}
巢狀的if結構
if(布林表示式 1){ //如果布林表示式 1true將執行的語句 if(布林表示式 2){ //如果布林表示式 2 true將執行的語句 } }
switch多選擇結構
switch(expression){ case value : //語句 break;//可選 case value : //語句 break;//可選 case value : //語句 break;//可選 default : //可選 //語句 }
-
switch語句中的變數型別可以是:byte、short、int或者char
-
從Java SE 7開始switch支援字串String型別,同時case標籤必須為字串常量或者字面量
case穿透現象
switch(expression){ case value : //語句 break;//可選 case value : //語句 break;//可選 case value : //語句 break;//可選 default : //可選 //語句 } //case穿透現象是如果沒有break則相應case語句執行後後面case語句會繼續執行 例: package com.king.struct; public class SwitchDemo { public static void main(String[] args) { // char grade = 'C'; switch (grade){ case 'A' : System.out.println("優秀"); break; case 'B' : System.out.println("良好"); case 'C' : System.out.println("及格"); case 'D' : System.out.println("再接再厲"); case 'E' : System.out.println("掛科"); default : System.out.println("未知等級"); } } } /*由於case穿透現象 執行結果為: 及格 再接再厲 掛科 未知等級 如果case 'D' : System.out.println("再接再厲"); break; 其他不變 則輸出結果為: 及格 再接再厲 */
新特性String型別
public class SwitchDemo { public static void main(String[] args) { String name = "三天"; switch (name){ case "三日": System.out.println("三日"); break; case "三天": System.out.println("三天"); break; default: System.out.println("弄啥嘞!"); break; } } } //字元的本質還是數字 //反編譯 java---class(位元組碼檔案)---反編譯(IDEA)
迴圈結構
while 迴圈
while(布林表示式){ //迴圈內容 }
-
只要布林表示式為true,迴圈就一直執行下去
-
大多數情況是會讓迴圈停止下來,需要一個讓表示式失效的方式來結束迴圈
-
少部分情況需要迴圈一直執行,比如伺服器的請求響應監聽等
-
迴圈條件一直為true會造成無限迴圈【死迴圈】,應避免死迴圈
例:計算1+2+3+...+100=?
public class WhileDemo { public static void main(String[] args) { int i = 0; int sum = 0; while (i <= 100){ sum = sum + i; i++; } System.out.println(sum); } }
do...while 迴圈
do{ //迴圈內容 }while(布林表示式);
while與do...while區別:
-
while先判斷後執行,do...while先執行後判斷
-
do... while總能保證迴圈體會至少執行一次
【重要】for迴圈
for(初始化;布林表示式;更新){ //程式碼語句 }
-
for迴圈結構是支援迭代的一種通用結構,是最有效最靈活的迴圈結構
-
for迴圈的執行次數是在執行之前就確定的
IDEA快捷生成for迴圈
//100.for可以在IDEA中快捷生成: for (int i = 0; i < 100; i++) { }
計算0到100之間的奇數和偶數的和
package com.king.struct; public class ForDemo { public static void main(String[] args) { //計算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("奇數的和:"+oddSum); System.out.println("偶數的和:"+evenSum); } }
輸出1-1000之間能被5整除的數,並且每行輸出3個
package com.king.struct; public class ForDemo { public static void main(String[] args) { //輸出1-1000之間能被5整除的數,並且每行輸出3個 for (int i = 0; i <= 1000; i++) { if (i%5 == 0){ System.out.print(i+"\t"); } if (i%(5*3) == 0){ System.out.println(); } } //println 輸出完會換行 //print 輸出完不會換行 } }
列印九九乘法表
package com.king.struct; public class ForDemo { public static void main(String[] args) { //列印九九乘法表 for (int j = 1; j <= 9; j++) { for (int i = 1;i <= j; i++){ System.out.print(j+"*"+i+"="+(j*i) + "\t"); } System.out.println(); } } } /*輸出結果: 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 */
增強型for迴圈
for(宣告語句:表示式){ //程式碼句子 }
示例:
package com.king.struct; public class ForDemo { 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
-
break在任何迴圈語句的主體部分,均可用break控制迴圈的流程。break用於強行退出迴圈,不執行迴圈中剩餘語句。(break語句也可在switch語句中使用)
-
continue語句在迴圈語句體中,用於終止某次迴圈過程,即跳過迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判定。
-
goto關鍵字
標籤是指後面跟一個:的識別符號,例如:lable:
//求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+" "); }
流控制列印三角形
//列印三角形 5行 package com.king.struct; 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(); } } } /*輸出結果: * *** ***** ******* ********* */