Java基礎語法(二)
目錄合抱之木,生于毫末;九層之臺,起于累土;千里之行,始于足下, ——《道德經》
- Java基礎語法(二)
- 十、用戶互動 Scanner 類(參考資料型別)
- 十一、亂數類 Random(參考資料型別)(擴展)
- 十二、順序結構
- 十三、選擇結構
- (一)if 條件陳述句
- (二) if ... else 條件陳述句
- (三)if ... else if ...多分支陳述句
- (四)嵌套的 if 條件陳述句
- (五)switch 多選擇結構
- 十四、回圈結構
- (一)while 回圈陳述句
- (二)do...while 回圈陳述句
- (三)for回圈
- (四)增強 for 回圈
- 十五、跳轉陳述句
- (一)break 陳述句
- (二)continue 陳述句
- (三)return陳述句
- (四)關于帶標簽的break和continue(擴展,不推薦使用)
十、用戶互動 Scanner 類(參考資料型別)
-
從 Java 5 后引入 java.util.Scanner 這一個包,我們可以通過 Scanner 這一個類來獲取用戶的輸入,
-
基本語法:
import java.util.Scanner; //使用Scanner需要先導包 ...... Scanner scanner = new Scanner(System.in); -
通過 Scanner 類的 next() 和 nextLine() 方法獲取輸入的字串,在讀取前一般需要使用 hasNext() 或 hasNextLine() 判斷是否還有輸入的資料,
next(): 1.一定要讀取到有效字符后才能結束輸入, 2.對輸入有效字符之前遇到的空白,next()方法會自動將其去掉, 3.只有輸入有效字符后才將其后面輸入的空白作為分隔符或者結束符, 4.next()不能得到帶有空格的字串! nextLine(): 1.以 Enter 為結束符,即nextLine()方法回傳的是輸入回車之前的所有字符, 2.nextLine()可以獲取空白! -
用完 Scanner (或者其他 IO 流的類),如果不關倍訓一直占用資源,所以用完就關閉是一個好習慣,
關閉 Scanner:
Scanner s = new Scanner(System.in); ...... s.close(); //關閉 Scanner -
Scanner 的進階使用,
hasNext() :用來是否還有輸入的字串 next() :用來接受控制臺錄入的字串 hasNextInt() :用來是否還有輸入的整數 nextInt() :用來接受控制臺錄入的整數 hasNextFloat() :用來是否還有輸入的浮點數 nextFloat() :用來接受控制臺錄入的浮點數 hasNextDouble() :用來是否還有輸入的浮點數 nextDouble() :用來接受控制臺錄入的浮點數
其中,hasNextFloat() 和 hasNextDouble() 功能基本相同,但特別的是,當控制臺輸入的不管是小數還是整數,這兩個方法的結果都回傳 true ,并且會把輸入的整數變成小數,
而 hasNextInt() 只有在控制臺輸入的是整數才回傳 true,
import java.util.Scanner;
public class demo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int i = 0;
double d = 0.0;
if(scanner.hasNextInt()){
i = scanner.nextInt();
System.out.println("i = "+i);
}else{
System.out.println("輸入的不是整數!");
}
if(scanner.hasNextDouble()){
d = scanner.nextDouble();
System.out.println("d = "+d);
}else{
System.out.println("輸入的不是小數!");
}
scanner.close();
}
}
上述代碼的三種結果:
1.輸入整數:
20 //鍵盤輸入
i = 20
20 //鍵盤輸入
d = 20.0
2.輸入小數:
3.14 //鍵盤輸入
輸入的不是整數!
d = 3.14
3.輸入字串(非數字)
hello //鍵盤輸入
輸入的不是整數!
輸入的不是小數!
結果分析:
1.輸入整數:
當輸入第一個20時,由于輸入的是整數,第一個20被scanner.nextInt() 接收并賦值給 i 并輸出 i = 20,
此時程式 scanner.hasNextDouble() 等待控制臺再次輸入,所以再次輸入第二個20,被scanner.nextDouble() 接收并賦值給 d 并輸出 d = 20.0,
2.輸入小數:
輸入 3.14 時,由于不是整數,無法被scanner.nextInt() 接收并賦值,所以輸出 “ 輸入的不是整數!”,
由于輸入的 3.14還沒被接收,所以會繼續給scanner.nextDouble() 判斷和接收,
3.輸入字串:
輸入字串 hello 時,在整個程式中,既沒被scanner.nextInt() 接收也沒被scanner.nextDouble() 接收,
原因分析:
為什么輸入整數,scanner.nextDouble()回傳 true 并且將整數轉換為 double 型別的小數?
這就得對scanner.nextDouble()的原始碼進行分析,(按住Ctrl鍵+點擊源程式的scanner.nextDouble()方法查看源代碼)

Double.parseDouble()是把括號里面String型別的內容變成double型別,
也就是說,當我們在控制臺輸入整數20時,它在程式中會先被轉換為String 型別的字串賦值給 s ,接著通過Double.parseDouble()是把括號里面String型別的字串 s 變成double型別然后回傳,所以整數20就轉換成了double型別的20.0,
為什么輸入字串,scanner.nextDouble()回傳 false?
這是因為源代碼中 catch 拋出了一個NumberFormatException(數字格式化例外),查看字串里面夾雜著string或者其他型別,當輸入字串時,便會回傳 false ,所以,我們在使用控制臺手動輸入小數時,不能在小數后面加上 F 或 D ,否則報錯,但是在程式中定義數字則可以,
十一、亂數類 Random(參考資料型別)(擴展)
Random類,它可以產生多種資料型別的亂數,在這里主要介紹生成整數與小數的方式,
-
public int nextInt(int maxValue) 產生 [0,maxValue) 范圍的隨機整數,包含0,不包含maxValue;
-
public double nextDouble() 產生 [0,1) 范圍的隨機小數,包含0.0,不包含1.0,
//Random 使用方法
import java.util.Random; //導包
......
//Random 變數名 = new Random();
Random r = new Random();
例子:
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
// 創建Random類的實體
Random r = new Random();
// 得到0-100范圍內的隨機整數,將產生的隨機整數賦值給i變數
int i = r.nextInt(100);
//得到0.0-1.0范圍內的隨機小數,將產生的隨機小數賦值給d變數
double d = r.nextDouble();
System.out.println(i);
System.out.println(d);
}
}
十二、順序結構
-
Java包含順序結構、選擇結構和回圈結構,
-
Java的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句執行,
-
順序結構是最簡單的演算法結構,
十三、選擇結構
(一)if 條件陳述句
-
if 陳述句可以單獨判斷運算式的結果,如果滿足某種條件就進行某種處理,
-
語法:
if(布爾運算式){ //如果不二運算式為true執行的陳述句 } -
圖示:

-
例子:
int a = 10; if(a > 10){ return true; } return false
(二) if ... else 條件陳述句
-
if 陳述句后面可以跟 else 陳述句,只有當 if 陳述句的布爾運算式值為 false 時,else 陳述句塊才會被執行,
-
語法:
if(布爾運算式){ ...... //如果布爾運算式的值為true執行的陳述句 }else{ ...... //如果布爾運算式的值為false執行的陳述句 } -
圖示:

-
例子:
int a = 10; int b = 11; if(a >= b){ System.out.println("a >= b"); }else{ System.out.println("a < b"); }
(三)if ... else if ...多分支陳述句
-
if 陳述句后面可以跟 else if…else 陳述句,這種陳述句可以檢測到多種可能的情況,
-
使用 if,else if,else 陳述句的時候,需要注意下面幾點:
- if 陳述句至多有 1 個 else 陳述句,else 陳述句在所有的 else if 陳述句之后,
- if 陳述句可以有若干個 else if 陳述句,它們必須在 else 陳述句之前,
- 一旦其中一個 else if 陳述句檢測為 true,其他的 else if 以及 else 陳述句都將跳過執行,
-
語法:
if(布爾運算式 1){ //如果布爾運算式 1的值為true執行代碼 }else if(布爾運算式 2){ //如果布爾運算式 2的值為true執行代碼 }else if(布爾運算式 3){ //如果布爾運算式 3的值為true執行代碼 }else { //如果以上布爾運算式都不為true執行代碼 } -
圖示:

-
例子:
public class Test { public static void main(String args[]){ int grade = 80; if(grade >= 85){ System.out.print("優秀"); }else if(gradegrade >= 75){ System.out.print("良好"); }else if(grade >= 60){ System.out.print("及格"); }else{ System.out.print("不及格"); } } }
(四)嵌套的 if 條件陳述句
-
使用嵌套的 if…else 陳述句是合法的,也就是說可以在另一個 if 或者 else if 陳述句中使用 if 或者 else if 陳述句,
-
語法:
if(布爾運算式 1){
////如果布爾運算式 1的值為true執行代碼
if(布爾運算式 2){
////如果布爾運算式 2的值為true執行代碼
}
}
-
例子
public class Test { public static void main(String args[]){ int x = 30; int y = 10; if( x == 30 ){ if( y == 10 ){ System.out.print("X = 30 and Y = 10"); } } } }
(五)switch 多選擇結構
-
switch case 陳述句判斷一個變數與一系列值中某個值是否相等,每個值稱為一個分支,
-
語法:
switch(運算式){ case value1: ... //執行陳述句 break; //可選 case value2: ... //執行陳述句 break; //可選 ...... default: ... //執行陳述句 } -
switch case 陳述句有如下規則:
- switch 陳述句中的變數型別可以是: byte、short、int 或者 char,從 Java SE 7 開始,switch 支持字串 String 型別了,同時 case 標簽必須為字串常量或字面量,
- switch 陳述句可以擁有多個 case 陳述句,每個 case 后面跟一個要比較的值和冒號,
- 當變數的值與 case 陳述句的值相等時,那么 case 陳述句之后的陳述句開始執行,直到 break 陳述句出現才會跳出 switch 陳述句,
- 當遇到 break 陳述句時,switch 陳述句終止,程式跳轉到 switch 陳述句后面的陳述句執行,case 陳述句不必須要包含 break 陳述句,如果沒有 break 陳述句出現,程式會繼續執行下一條 case 陳述句,直到出現 break 陳述句,
- switch 陳述句可以包含一個 default 分支,該分支一般是 switch 陳述句的最后一個分支(可以在任何位置,但建議在最后一個),default 在沒有 case 陳述句的值和變數值相等的時候執行,default 分支不需要 break 陳述句,
-
例子:
public class Test { public static void main(String args[]){ int i = 1; switch(i){ case 0: System.out.println("0"); case 1: System.out.println("1"); case 2: System.out.println("2"); case 3: System.out.println("3"); break; default: System.out.println("default"); } } } /* 輸出為: 1 2 3 */
十四、回圈結構
Java中有三種主要的回圈結構:
- while 回圈
- do…while 回圈
- for 回圈
在 Java5 中引入了一種主要用于陣列的增強型 for 回圈,
(一)while 回圈陳述句
-
while陳述句會反復地進行條件判斷,只要條件成立,{ } 內的陳述句就會執行,直到條件不成立,while回圈就結束,
-
語法:
while( 布爾運算式 ) { //回圈內容 } -
圖示:

-
例子:
public class Test { public static void main(String[] args) { int x = 1; while( x < 4 ) { System.out.println("x = " + x ); x++; } } } /*輸出: x = 1 x = 2 x = 3 */
(二)do...while 回圈陳述句
- do…while 回圈和 while 回圈相似,不同的是,do…while 回圈至少會執行一次,
- 語法:
do {
//代碼陳述句
}while(布爾運算式);
注意:布爾運算式在回圈體的后面,所以陳述句塊在檢測布爾運算式之前已經執行了, 如果布爾運算式的值為 true,則陳述句塊一直執行,直到布爾運算式的值為 false,
-
圖示:

-
例子:
public class Test { public static void main(String[] args){ int x = 4; do{ System.out.println("x = " + x ); x——; }while( x > 0 ); } } /*輸出: x = 4 x = 3 x = 2 x = 1 */
(三)for回圈
- for回圈執行的次數是在執行前就確定的,語法格式如下:
for(初始化; 布爾運算式; 操作運算式) {
//代碼陳述句
}
-
具體執行流程:
for(one;two;three){ four; } /* 第一步,執行one 第二步,執行two 第三步,執行four 第四步,執行three,然后重復執行第二步 第五步,退出回圈 */ -
例子:
public class Test { public static void main(String[] args) { for(int x = 1; x < 4; x++) { System.out.println("x = " + x ); } } } /*輸出: x = 1 x = 2 x = 3 */
(四)增強 for 回圈
-
Java5 引入了一種主要用于陣列或集合的增強型 for 回圈,
-
語法:
for(宣告陳述句 : 運算式){ //代碼句子 }宣告陳述句:宣告新的區域變數,該變數的型別必須和陣列元素的型別匹配,其作用域限定在回圈陳述句塊,其值與此時陣列元素的值相等,
運算式:運算式是要訪問的陣列名,或者是回傳值為陣列的方法,
-
例子:
public class Test { public static void main(String[] args){ int [] numbers = {10, 20, 30, 40, 50}; for(int x : numbers ){ System.out.print( x ); System.out.print(","); } System.out.print("\n"); String [] names ={"James", "Larry", "Tom", "Lacy"}; for( String name : names ) { System.out.print( name ); System.out.print(","); } } } /*輸出: 10,20,30,40,50, James,Larry,Tom,Lacy, */
十五、跳轉陳述句
Java 語言中,有三種跳轉陳述句:break、continue 和 return,
(一)break 陳述句
-
break 主要用在回圈陳述句或者 switch 陳述句中,用來結束整個回圈或者跳出整個陳述句塊,
-
有多個回圈嵌套時,break 跳出其所在回圈的最里層的回圈,
public class Test { public static void main(String[] args) { for (int i = 1 ;i <4;i++){ for (int a = 4;a > 0;a--){ if(a == 2){ break; } System.out.print(a + " "); } } } } /*輸出 4 3 4 3 4 3 */
(二)continue 陳述句
-
continue 適用于任何回圈控制結構中,作用是讓程式立刻終止本次回圈,直接進行下一次回圈的判定,
在 for 回圈中,continue 陳述句使程式立即跳轉到操作運算式陳述句,
在 while 或者 do…while 回圈中,程式立即跳轉到布爾運算式的判斷陳述句,
-
例子:
public class Test { public static void main(String[] args) { int [] numbers = {10, 20, 30, 40, 50}; for(int x : numbers ) { if( x == 30 ) { continue; } System.out.println( x ); } } } /*輸出: 10 20 40 50 */
(三)return陳述句
- return陳述句可以從一個方法回傳,并把控制權交給呼叫它的陳述句,
(四)關于帶標簽的break和continue(擴展,不推薦使用)
-
Java唯一用到標簽的地方是在回圈陳述句之前,而在回圈陳述句之前設定標簽的原因:
當 break 或 continue 陳述句出現在嵌套回圈時,它只能跳出內層回圈,如果想使用 break 或 continue 陳述句跳出外層回圈,則需要對外層回圈添加標簽,它們就會中斷到標簽的地方,
public class Test {
public static void main(String[] args) {
outer:for (int i = 1 ;i <4;i++){
for (int a = 4;a > 0;a--){
if(a == 2){
break outer; //結束指定標簽的那一層回圈
}
System.out.print(a + " ");
}
}
}
}
/*輸出
4 3
*/
- 帶標簽的 break:結束指定標簽的那一層回圈,
- 帶標簽的 continue:結束一次指定標簽的那一層回圈,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/433283.html
標籤:其他
上一篇:java寶典筆記(一)
下一篇:6-常用類
