第二章 Java流程控制
阿新 • • 發佈:2022-03-16
第二章 Java流程控制
1 Scanner物件
1.1 用途
Java提供了Scanner工具類用以獲取使用者的輸入,java.util.Scanner是Java5的新特徵,可以用Scanner類來獲取使用者的輸入
1.2 基本語法
Scanner scanner = new Scanner(System.in);
通過Scanner類的next()與nextLine()方法獲取輸入的字串,在讀取前外面一般需要使用hasNext()與hasNextLine()判斷是否還有輸入的資料,當然也可以不用判斷
1.2 next()
- 以空白(即空格)為結束符,若文字帶有空格則不會顯示空格後的內容
- next()不能得到帶有空格的字串
package com.liam.scanner; import java.util.Scanner; public class Demo01 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);//建立一個掃描器物件,用以接收鍵盤的資料 System.out.println("使用next方式接收:"); //判斷使用者有沒有輸入字串 if (scanner.hasNext()){ String str = scanner.next();//使用next方法把使用者輸入的內容存在str中 System.out.println("輸入的內容為:"+str); } scanner.close();//凡是IO流的類如果不關閉會一直佔用資源,所以要養成好習慣,用完就關掉,就像洗完手就要關水龍頭 } }
輸出效果如圖:
1.3 nextLine()
- 以回車為結束符,也就是說nextLine()方法返回的是輸入回車之前的所有字元
- 可以得到帶有空格的字串
package com.liam.scanner; import java.util.Scanner; public class Demo02 { 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(); } }
輸出效果如圖:
【注意】凡是IO流的類如果不關閉會一直佔用資源,所以要養成好習慣,用完就關掉,就像洗完手就要關水龍頭
1.4 nextXXX()和hasNextXXX()
- Scanner除了nextLine()方法外還有很多形式以nextXXX()的方法來存放使用者輸入的不同型別的資料,如nextInt(),nextFloat(),nextLong()等
- 同理Scanner還有與之配套的hasNextXXX()方法以此來判斷使用者是否輸入了相應的資料型別,如hasNextInt(),hasNextFloat(),hasNextLong()等
package com.liam.scanner;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int i = 0;
float f = 0.0f;
System.out.println("請輸入整數:");
//判斷輸入的是否為int型
if (scanner.hasNextInt()){
i = scanner.nextInt();
System.out.println("輸入的整數為:"+i);
}else {
System.out.println("輸入的不是整數!");
}
System.out.println("請輸入小數:");
//判斷輸入的是否為float型
if (scanner.hasNextFloat()){
f = scanner.nextFloat();
System.out.println("輸入的小數為:"+f);
}else {
System.out.println("輸入的不是小數!");
}
scanner.close();
}
}
練習:輸入多個數字,求其總和與平均數,每輸入一個數字用回車確認,通過輸入非數字來結束輸入並輸出執行結果
package com.liam.scanner;
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int i = 0;
double num = 0;
double sum = 0;
System.out.println("Please enter the number:");
while (scanner.hasNextDouble()){
System.out.println("Please enter the number:");
num = scanner.nextDouble();
i++;
sum = sum +num;
System.out.println("Now the sum is:"+sum+"\nNow the average is:"+sum/i);
}
scanner.close();
}
}
2 if結構
2.1 else if多選擇結構
if後可以有若干個else if,一旦其中一個else if語句檢測為true,其他的else if以及else都將跳過執行
package com.liam.struct;
import java.util.Scanner;
public class IfDemo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入成績:");
double score = scanner.nextDouble();
if (score == 100) {
System.out.println("滿分");
}else if (score < 100 && score >= 80) {
System.out.println("優秀");
}else if (score < 80 && score >= 60) {
System.out.println("良好");
}else if(score < 60 && score >= 0){
System.out.println("不及格");
}else {
System.out.println("請正確輸入成績");
}
scanner.close();
}
}
3 switch多選擇結構
3.1 switch語法
- case有穿透機制,若沒有break那麼會輸出沒有break的所有選項,所以每個case都要加break
- switch主要功能就是匹配一個具體的值
switch (expression){
case value :
//語句
break;
case value :
//語句
break;
case value :
//語句
break;
case value :
//語句
break;
default://要是都不符合就會走default
//語句
- switch語句中的變數型別可以是:byte、short、int、char
- 從JavaSE 7開始switch支援String型別了
- 同時case標籤必須為字串常量或字面量
4 迴圈結構
4.1 while迴圈語法
while(布林表示式){
//迴圈內容
}
4.2 do...while迴圈語法
do{
//迴圈內容
}while(布林表示式);
- do...while和while類似,不同的是,do...while至少會執行一次
- while是先判斷後執行,do...while是先執行後判斷
4.3 for迴圈語法
for(初始化;布林表示式;更新){
//迴圈內容
}
- IDEA可以用數字.for來快速生成for迴圈
練習1:計算0到100之間的奇數和與偶數和
int oddSum = 0;
int evenSum = 0;
for (int i = 1; i <= 100; i++) {
if (i%2==0){
evenSum+=i;
}else {
oddSum+=i;
}
}
System.out.println(oddSum+"\n"+evenSum);
練習2:輸出1-1000之間能被5整除的數,並且每行輸出3個
for (int i = 1; i <= 1000; i++) {
if (i%5==0){
System.out.print(i+"\t");
}
if (i%15==0){
System.out.print("\n");
}
}
【注】print和println區別:println全稱print line,輸出完會換行,而print輸出完不會換行
練習3:列印九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
System.out.println("\n");
}
練習4:列印一個5行的等腰三角形
思路:
- 輸出都用print而不是println,這樣可以一行一行的輸出,輸出的圖形分為三個部分,分別對應三個for迴圈,再加上最外層控制行數量的for迴圈一共四個for迴圈
for (int i = 1; i <= 5; i++) {//最外層控制行數量的for,此處選擇從1開始++而不是從5開始--,如果從5開始--控制4×4直角三角形部分會很麻煩
for (int j = 5; j > i; j--) {//控制空格(or@)部分的for
System.out.print("@\t");//把空格換成@可以更直觀理解
}
for (int x = 1; x <= i; x++) {//控制4×4直角三角形的for
System.out.print("*\t");
}
for (int y = 1; y < i; y++) {//控制3×3直角三角形的for
System.out.print("*\t");
}
System.out.print("\n");
}
整體圖形由三個部分組成,輸出效果如下圖:
4.4 增強for迴圈
- Java5引入了一種主要用於陣列或集合的增強型for迴圈
- 語法如下:
for(宣告語句:表示式){//程式碼句子}
- 宣告語句:宣告新的區域性變數,該變數的型別必須和陣列元素的型別匹配,其作用域限定在迴圈語句塊,其值與此時陣列元素的值相等
- 表示式:表示式是要訪問的陣列名,或者是返回值為陣列的方法
int[] num = {10,20,30,40,50};
for (int x:num){
System.out.println(x);//遍歷num陣列
}
4.5 break和continue
- break用於強行退出迴圈,不執行迴圈中剩餘的語句(break也在switch中使用)
- continue在迴圈語句中用於終止某次迴圈過程,即跳過i迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判定
break
int i = 0;
while (i<100){
i++;
if (i==30)
break;
System.out.println(i);
}
//輸出結果到29就終止
continue
int i = 0;
while (i<100){
i++;
if (i==30)
continue;
System.out.println(i);
}
//100以內除了30都輸出成功