咱們要學的Scanner類是屬於引用數據類型,咱們先了解下引用數據類型。java
引用數據類型的使用:dom
與定義基本數據類型變量不一樣,引用數據類型的變量定義及賦值有一個相對固定的步驟或格式。學習
數據類型 變量名 = new 數據類型();spa
每種引用數據類型都有其功能,咱們能夠調用該類型實例的功能。3d
變量名.方法名();code
Scanner類對象
Scanner類是引用數據類型的一種,咱們可使用該類來完成用戶鍵盤錄入,獲取到錄入的數據。blog
Scanner使用步驟:字符串
導包:import java.util.Scanner;it
建立對象實例:Scanner sc = new Scanner(System.in);
調用方法:
int i = sc.nextInt(); 用來接收看着他錄入的數字
String s = sc.next(); 用來接收控制檯錄入的字符串
瞭解完Scanner類,咱們編寫代碼來使用下它:ScannerDemo01.java
import java.util.Scanner; public class ScannerDemo01 { public static void main(String[] args) { //建立Scanner引用類型的變量 Scanner sc = new Scanner(System.in); //獲取數字 System.out.println("請輸入一個數字"); int n = sc.nextInt(); System.out.println("n的值爲" + n); //獲取字符串 System.out.println("請輸入一個字符串"); String str = sc.next(); System.out.println("str的值爲" + str); } }
運行結果以下圖所示。
咱們來學習下,用來產生隨機數的類Random,它也屬於引用數據類型。
這個Random類,它能夠產生多種數據類型的隨機數,在這裏咱們主要介紹生成整數與小數的方式。
方法簡介
public int nextInt(int maxValue) 產生[0,maxValue)範圍的隨機整數,包含0,不包含maxValue;
public double nextDouble() 產生[0,1)範圍的隨機小數,包含0.0,不包含1.0。
引用數據類型的使用方式,在學習鍵盤錄入Scanner時,咱們已經學習過,在這裏,再次回顧一下:
Random使用方式:
import導包:所屬包java.util.Random
建立實例格式:Random 變量名 = new Random();
接下來,經過一段代碼,一塊兒學習下Random類的使用,RandomDemo.java
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); } }
運行結果以下圖所示:
接下來要學習的if條件語句分爲三種語法格式,每一種格式都有它自身的特色,下面咱們分別進行介紹
if語句是指若是知足某種條件,就進行某種處理。例如,小明媽媽跟小明說「若是你考試得了100分,星期天就帶你去遊樂場玩」。這句話能夠經過下面的一段僞代碼來描述。
若是小明考試得了100分
媽媽星期天帶小明去遊樂場
在上面的僞代碼中,「若是」至關於Java中的關鍵字if,「小明考試得了100分」是判斷條件,須要用()括起來,「媽媽星期天帶小明去遊樂場」是執行語句,須要放在{}中。修改後的僞代碼以下:
if (小明考試得了100分) { 媽媽星期天帶小明去遊樂場 }
上面的例子就描述了if語句的用法,在Java中,if語句的具體語法格式以下:
if (條件語句){ 執行語句; …… }
上述格式中,判斷條件是一個布爾值,當判斷條件爲true時,{}中的執行語句纔會執行。if語句的執行流程以下圖所示。
接下來經過一段代碼,學習一下if語句的具體用法,IfDemo01.java
public class IfDemo01 { public static void main(String[] args) { int x = 5; if (x < 10) { x++; } System.out.println("x=" + x); } }
運行結果以下圖所示。
在上述代碼中,定義了一個變量x,其初始值爲5。在if語句的判斷條件中判斷x的值是否小於10,很明顯條件成立,{}中的語句會被執行,變量x的值將進行自增。從運行結果能夠看出,x的值已由原來的5變成了6。
if…else語句是指若是知足某種條件,就進行某種處理,不然就進行另外一種處理。例如,要判斷一個正整數的奇偶,若是該數字能被2整除則是一個偶數,不然該數字就是一個奇數。if…else語句具體語法格式以下:
if (判斷條件){ 執行語句1 …… }else{ 執行語句2 …… }
上述格式中,判斷條件是一個布爾值。當判斷條件爲true時,if後面{}中的執行語句1會執行。當判斷條件爲false時,else後面{}中的執行語句2會執行。if…else語句的執行流程以下圖所示。
接下來經過一段代碼,來實現判斷奇偶數的程序,IfDemo02.java
public class IfDemo02 { public static void main(String[] args) { int num = 19; if (num % 2 == 0) { // 判斷條件成立,num被2整除 System.out.println("num是一個偶數"); } else { System.out.println("num是一個奇數"); } } }
運行結果以下圖所示。
上述代碼中,變量num的值爲19,模以2的結果爲1,不等於0,判斷條件不成立。所以會執行else後面{}中的語句,打印「num是一個奇數」。
if…else if…else語句用於對多個條件進行判斷,進行多種不一樣的處理。例如,對一個學生的考試成績進行等級的劃分,若是分數大於80分等級爲優,不然,若是分數大於70分等級爲良,不然,若是分數大於60分等級爲中,不然,等級爲差。if…else if…else語句具體語法格式以下:
if (判斷條件1) { 執行語句1 } else if (判斷條件2) { 執行語句2 } ... else if (判斷條件n) { 執行語句n } else { 執行語句n+1 }
上述格式中,判斷條件是一個布爾值。當判斷條件1爲true時,if後面{}中的執行語句1會執行。當判斷條件1爲false時,會繼續執行判斷條件2,若是爲true則執行語句2,以此類推,若是全部的判斷條件都爲false,則意味着全部條件均未知足,else後面{}中的執行語句n+1會執行。if…else if…else語句的執行流程以下圖所示。
接下來經過一段代碼,來實現對學生考試成績進行等級劃分的程序,IfDemo03.java
public class IfDemo03 { public static void main(String[] args) { int grade = 75; // 定義學生成績 if (grade > 80) { // 知足條件 grade > 80 System.out.println("該成績的等級爲優"); } else if (grade > 70) { // 不知足條件 grade > 80 ,但知足條件 grade > 70 System.out.println("該成績的等級爲良"); } else if (grade > 60) { // 不知足條件 grade > 70 ,但知足條件 grade > 60 System.out.println("該成績的等級爲中"); } else { // 不知足條件 grade > 60 System.out.println("該成績的等級爲差"); } } }
運行結果以下圖所示。
上述代碼中,定義了學生成績grade爲75。它不知足第一個判斷條件grade>80,會執行第二個判斷條件grade>70,條件成立,所以會打印「該成績的等級爲良」。
三元運算符,它和if-else語句相似,語法以下:
判斷條件 ? 表達式1 : 表達式2
三元運算符會獲得一個結果,一般用於對某個變量進行賦值,當判斷條件成立時,運算結果爲表達式1的值,不然結果爲表達式2的值。
例如求兩個數x、y中的較大者,若是用if…else語句來實現,具體代碼以下:
int x = 0; int y = 1; int max; if (x > y) { max = x; } else { max = y; }
上面的代碼運行以後,變量max的值爲1。其中3-8行的代碼可使用下面的三元運算來替換。
int max = x > y ? x : y;
while循環語句和選擇結構if語句有些類似,都是根據條件判斷來決定是否執行大括號內的執行語句。區別在於,while語句會反覆地進行條件判斷,只要條件成立,{}內的執行語句就會執行,直到條件不成立,while循環結束。while循環語句的語法結構以下:
while(循環條件){ 執行語句 ……… }
在上面的語法結構中,{}中的執行語句被稱做循環體,循環體是否執行取決於循環條件。當循環條件爲true時,循環體就會執行。循環體執行完畢時會繼續判斷循環條件,如條件仍爲true則會繼續執行,直到循環條件爲false時,整個循環過程纔會結束。
while循環的執行流程以下圖所示。
接下來經過一段代碼,來實現打印1~4之間的天然數,WhileDemo.java
public class WhileDemo { public static void main(String[] args) { int x = 1; // 定義變量x,初始值爲1 while (x <= 4) { // 循環條件 System.out.println("x = " + x); // 條件成立,打印x的值 x++; // x進行自增 } } }
運行結果以下圖所示。
在上述代碼中,x初始值爲1,在知足循環條件x <= 4的狀況下,循環體會重複執行,打印x的值並讓x進行自增。所以打印結果中x的值分別爲一、二、三、4。
你們要注意的是,代碼x++用於在每次循環時改變變量x的值,從而達到最終改變循環條件的目的。若是沒有這行代碼,整個循環會進入無限循環的狀態,永遠不會結束。
for循環語句是最經常使用的循環語句,通常用在循環次數已知的狀況下。for循環語句的語法格式以下:
for(初始化表達式; 循環條件; 操做表達式){ 執行語句 ……… }
在上面的語法結構中,for關鍵字後面()中包括了三部份內容:初始化表達式、循環條件和操做表達式,它們之間用「;」分隔,{}中的執行語句爲循環體。
接下來分別用①表示初始化表達式、②表示循環條件、③表示操做表達式、④表示循環體,經過序號來具體分析for循環的執行流程。具體以下:
for(① ; ② ; ③){ ④ } 第一步,執行① 第二步,執行②,若是判斷結果爲true,執行第三步,若是判斷結果爲false,執行第五步 第三步,執行④ 第四步,執行③,而後重複執行第二步 第五步,退出循環
接下來經過一個案例對天然數1~4進行求和,以下所示。ForDemo01.java
public class ForDemo01 { public static void main(String[] args) { int sum = 0; // 定義變量sum,用於記住累加的和 for (int i = 1; i <= 4; i++) { // i的值會在1~4之間變化 sum += i; // 實現sum與i的累加 } System.out.println("sum = " + sum); // 打印累加的和 } }
運行結果以下圖所示。
上述代碼中,變量i的初始值爲1,在判斷條件i<=4爲true的狀況下,會執行循環體sum+=i,執行完畢後,會執行操做表達式i++,i的值變爲2,而後繼續進行條件判斷,開始下一次循環,直到i=5時,條件i<=4爲false,結束循環,執行for循環後面的代碼,打印「sum=10」。
爲了讓初學者能熟悉整個for循環的執行過程,現將上述代碼運行期間每次循環中變量sum和i的值經過表羅列出來。
do…while循環語句和while循環語句功能相似,其語法結構以下:
do { 執行語句 ……… } while(循環條件);
在上面的語法結構中,關鍵字do後面{}中的執行語句是循環體。do…while循環語句將循環條件放在了循環體的後面。這也就意味着,循環體會無條件執行一次,而後再根據循環條件來決定是否繼續執行。
do…while循環的執行流程以下圖所示。
接下來使用do…while循環語句來實現打印1~4之間的天然數DoWhileDemo.java。
public class DoWhileDemo { public static void main(String[] args) { int x = 1; // 定義變量x,初始值爲1 do { System.out.println("x = " + x); // 打印x的值 x++; // 將x的值自增 } while (x <= 4); // 循環條件 } }
運行結果以下圖所示。
咱們發現WhileDemo.java與DoWhileDemo.java運行的結果一致,這說明什麼呢?這說明do …while循環和while循環能實現一樣的功能。然而在程序運行過程當中,這兩種語句仍是有差異的。若是循環條件在循環語句開始時就不成立,那麼while循環的循環體一次都不會執行,而do…while循環的循環體仍是會執行一次。若將DoWhileDemo.java中的循環條件x<=4改成x < 1,DoWhileDemo.java運行結果會打印x=1,而WhileDemo.java運行結果什麼也不會打印。
最簡單無限循環格式:
while(true){} 或 for(;;){}
無限循環存在的緣由是並不知道循環多少次,而是根據某些條件,來控制循環。
嵌套循環是指在一個循環語句的循環體中再定義一個循環語句的語法結構。while、do…while、for循環語句均可以進行嵌套,而且它們之間也能夠互相嵌套,如最多見的在for循環中嵌套for循環,格式以下:
for(初始化表達式; 循環條件; 操做表達式) { ……… for(初始化表達式; 循環條件; 操做表達式) { 執行語句 ……… } ……… }
接下來經過一個練習,來實現使用「*」打印直角三角形,以下所示。ForForDemo.java
public class ForForDemo { public static void main(String[] args) { int i, j; // 定義兩個循環變量 for (i = 1; i <= 9; i++) { // 外層循環 for (j = 1; j <= i; j++) { // 內層循環 System.out.print("*"); // 打印* } System.out.print("\n"); // 換行 } } }
運行結果以下所示。
在上述代碼中定義了兩層for循環,分別爲外層循環和內層循環,外層循環用於控制打印的行數,內層循環用於打印「*」,每一行的「*」個數逐行增長,最後輸出一個直角三角形。因爲嵌套循環程序比較複雜,下面分步驟進行詳細地講解,具體以下:
第一步,在第3行代碼定義了兩個循環變量i和j,其中i爲外層循環變量,j爲內層循環變量。
第二步,在第4行代碼將i初始化爲1,條件i <= 9爲true,首次進入外層循環的循環體。
第三步,在第5行代碼將j初始化爲1,因爲此時i的值爲1,條件j <= i爲true,首次進入內層循環的循環體,打印一個「*」。
第四步,執行第5行代碼中內層循環的操做表達式j++,將j的值自增爲2。
第五步,執行第5行代碼中的判斷條件j<=i,判斷結果爲false,內層循環結束。執行後面的代碼,打印換行符。
第六步,執行第4行代碼中外層循環的操做表達式i++,將i的值自增爲2。
第七步,執行第4行代碼中的判斷條件i<=9,判斷結果爲true,進入外層循環的循環體,繼續執行內層循環。
第八步,因爲i的值爲2,內層循環會執行兩次,即在第2行打印兩個「*」。在內層循環結束時會打印換行符。
第九步,以此類推,在第3行會打印3個「*」,逐行遞增,直到i的值爲10時,外層循環的判斷條件i <= 9結果爲false,外層循環結束,整個程序也就結束了。
跳轉語句用於實現循環執行過程當中程序流程的跳轉,在Java中的跳轉語句有break語句和continue語句。接下來分別進行詳細地講解。
在switch條件語句和循環語句中均可以使用break語句。當它出如今switch條件語句中時,做用是終止某個case並跳出switch結構。當它出如今循環語句中,做用是跳出循環語句,執行後面的代碼。關於在switch語句中使用break前面的例程已經用過了,接下來經過下面一段代碼,實現將當變量x的值爲3時,使用break語句跳出循環,代碼以下所示。BreakDemo.java
public class BreakDemo { public static void main(String[] args) { int x = 1; // 定義變量x,初始值爲1 while (x <= 4) { // 循環條件 System.out.println("x = " + x); // 條件成立,打印x的值 if (x == 3) { break; } x++; // x進行自增 } } }
運行結果以下圖所示。
在上述帶代碼中,經過while循環打印x的值,當x的值爲3時使用break語句跳出循環。所以打印結果中並無出現「x=4」。
當break語句出如今嵌套循環中的內層循環時,它只能跳出內層循環,若是想使用break語句跳出外層循環則須要對外層循環添加標記。接下來將ForForDemo.java稍做修改,控制程序只打印4行「*」,以下所示。BreakDemo02.java
public class BreakDemo02 { public static void main(String[] args) { int i, j; // 定義兩個循環變量 itcast: for (i = 1; i <= 9; i++) { // 外層循環 for (j = 1; j <= i; j++) { // 內層循環 if (i > 4) { // 判斷i的值是否大於4 break itcast; // 跳出外層循環 } System.out.print("*"); // 打印* } System.out.print("\n"); // 換行 } } }
運行結果以下圖所示。
BreakDemo02.java與ForForDemo.java實現原理相似,只是在外層for循環前面增長了標記「itcast」。當i>4時,使用break itcast;語句跳出外層循環。所以程序只打印了4行「*」。
continue語句用在循環語句中,它的做用是終止本次循環,執行下一次循環。接下來經過一個練習對1~100以內的奇數求和,ContinueDemo.java
public class ContinueDemo { public static void main(String[] args) { int sum = 0; // 定義變量sum,用於記住和 for (int i = 1; i <= 100; i++) { if (i % 2 == 0) { // i是一個偶數,不累加 continue; // 結束本次循環 } sum += i; // 實現sum和i的累加 } System.out.println("sum = " + sum); } }
運行結果以下圖所示。
上述代碼中,使用for循環讓變量i的值在1~100之間循環,在循環過程當中,當i的值爲偶數時,將執行continue語句結束本次循環,進入下一次循環。當i的值爲奇數時,sum和i進行累加,最終獲得1~100之間全部奇數的和,打印「sum = 2500」。
在嵌套循環語句中,continue語句後面也能夠經過使用標記的方式結束本次外層循環,用法與break語句類似,在此再也不舉例說明。