流程式控制制 用戶交互Scanner Scanner類可以實現電腦與人的交互。java.util.Scanner 是 Java5 的新特征,我們可以通過 Scanner 類來獲取用戶的輸入。 Scanner 類的 next() 與 nextLine() 方法獲取輸入的字元串,在讀取前我們一般需要 使用 ...
流程式控制制
用戶交互Scanner
Scanner類可以實現電腦與人的交互。java.util.Scanner 是 Java5 的新特征,我們可以通過 Scanner 類來獲取用戶的輸入。
Scanner 類的 next() 與 nextLine() 方法獲取輸入的字元串,在讀取前我們一般需要 使用 hasNext() 與 hasNextLine() 判斷是否還有輸入的數據。
next & nextLine
使用next方式接收一下輸入的數據:
public static void main(String[] args) {
//創建一個掃描器對象,用於接收鍵盤數據
Scanner scanner = new Scanner(System.in);
//next方式接收字元串
System.out.println("Next方式接收:");
//判斷用戶還有沒有輸入字元
if (scanner.hasNext()){
String str = scanner.next();
System.out.println("輸入內容:"+str);
}//凡是屬於IO流的類如果不關閉會一直占用資源,所以我們要對資源進行關閉
scanner.close();
}
測試數據:Hello World!
結果:只輸出了Hello。
使用另一個方法來接收數據:nextLine():
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); // 從鍵盤接收數據
// nextLine方式接收字元串
System.out.println("nextLine方式接收:");
// 判斷是否還有輸入
if (scan.hasNextLine()) {
String str2 = scan.nextLine();
System.out.println("輸入內容:" + str2);
}
scan.close();
}
測試數據:Hello World!
結果:輸出了Hello World!
重點是兩者的區別:
next():
-
一定要讀取到有效字元後才可以結束輸入。
-
對輸入有效字元之前遇到的空白,next() 方法會自動將其去掉。
-
只有輸入有效字元後才將其後面輸入的空白作為分隔符或者結束符。
-
next() 不能得到帶有空格的字元串。
nextLine():
-
以Enter為結束符,也就是說 nextLine()方法返回的是輸入回車之前的所有字元。
-
可以獲得空白。
順序結構
JAVA的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句執行。語句與語句之間,框與框之間是按從上到下的順序進行的,它是由若幹個依次執行的處理步驟組成的,它是任何一個演算法都離不開的一種基本演算法結構。
選擇結構
1.if單選擇結構:
我們需要判斷一個東西是否可行我們才向下去執行。
if(布爾表達式){
//如果布爾表達式為true將執行的語句
}
意義:if語句對條件表達式進行一次測試,若測試為真,則執行下麵的語句,否則跳過該語句。
2.if雙選擇結構:
說得明白一點就是“成功了怎麼樣否則怎麼樣”。
if(布爾表達式){
//如果布爾表達式的值為true
語句塊1
}else{
//如果布爾表達式的值為false
語句塊2
}
意義:當條件表達式為真時,執行語句塊1,否則,執行語句塊2。也就是else部分。
3.if多選擇結構:
在實際生活中我們可能面臨著有多個條件滿足一個人條件就做對應的事,那麼此時我們就需要多選擇結構。
if(布爾表達式 1){
//如果布爾表達式 1的值為true執行代碼
}else if(布爾表達式 2){
//如果布爾表達式 2的值為true執行代碼
}else if(布爾表達式 3){
//如果布爾表達式 3的值為true執行代碼
}else {
//如果以上布爾表達式都不為true執行代碼
}
if 語句後面可以跟 else if…else 語句,這種語句可以檢測到多種可能的情況。
if多選擇結構使用的註意點:
- if 語句至多有 1 個 else 語句,else 語句在所有的 else if 語句之後。
- if 語句可以有若幹個 else if 語句,它們必須在 else 語句之前。
- 一旦其中一個 else if 語句檢測為 true,其他的 else if 以及 else 語句都將跳過執行。
4.嵌套的if結構:
使用嵌套的 if…else 語句是合法的。也就是說你可以在另一個 if 或者 else if 語句中使用 if 或者 else if 語句。你可以像 if 語句一樣嵌套 else if...else。
例如:
if(布爾表達式 1){
//如果布爾表達式 1的值為true執行代碼
if(布爾表達式 2){
//如果布爾表達式 2的值為true執行代碼
}
}
5.switch多選擇結構:
switch case 語句判斷一個變數與一系列值中某個值是否相等若相等就執行對應語句塊中的代碼,每個值稱為一個分支。
例如:
switch(expression){
case value :
//語句 break; //可選
case value :
//語句 break; //可選 //你可以有任意數量的case語句
default : //可選
//語句
}
使用switch case語句需要註意以下使用規則:
-
switch 語句中的變數類型可以是: byte、short、int 或者 char。從 Java SE 7 開始,switch 支持字元串 String 類型了,同時 case 標簽必須為字元串常量或字面量。
-
switch 語句可以擁有多個 case 語句。每個 case 後面跟一個要比較的值和冒號。
-
case 語句中的值的數據類型必須與變數的數據類型相同,而且只能是常量或者字面常量。
-
當變數的值與 case 語句的值相等時,那麼 case 語句之後的語句開始執行,直到 break 語句出現才會跳出 switch 語句。
-
當遇到 break 語句時,switch 語句終止。程式跳轉到 switch 語句後面的語句執行。case 語句不必須要包含 break 語句。如果沒有 break 語句出現,程式會繼續執行下一條 case 語句,直到出現break 語句。
-
switch 語句可以包含一個 default 分支,該分支一般是 switch 語句的最後一個分支(可以在任何位置,但建議在最後一個)default 在沒有 case 語句的值和變數值相等的時候執行。default 分支不需要 break 語句。
switch case 執行時,一定會先進行匹配,匹配成功返回當前 case 的值,再根據是否有 break,判斷是否繼續輸出,或是跳出判斷。
如果 case 語句塊中沒有 break 語句時,匹配成功後,從當前 case 開始,後續所有 case 的值都會輸出。如果後續的 case 語句塊有 break 語句則會跳出判斷。
迴圈結構
順序結構的程式語句只能被執行一次。如果您想要同樣的操作執行多次,,就需要使用迴圈結構。
Java中有三種主要的迴圈結構:
-
while 迴圈
-
do…while 迴圈
-
for 迴圈
1.while迴圈:
while是最基本的迴圈,它的結構為:
while( 布爾表達式 ) {
//迴圈內容
}
例如:
public static void main(String[] args) {
int i = 0;
//i小於100就會一直迴圈
while (i<100){
i++; System.out.println(i);
}
}
只要布爾表達式的值為true那麼就會一直迴圈下去。
在迴圈剛開始時,會計算一次“布爾表達式”的值,若條件為真,執行迴圈體。而對於後來每一次額外的迴圈,都會在開始前重新計算一次判斷是否為真。直到條件不成立,則迴圈結束。
2.do...while迴圈:
對於上面while迴圈在每次迴圈之前我們都要判斷布爾表達式的值是否為true,當為true的時候我們才會進行迴圈否則我們就會終止迴圈。有時候我們需要即使不滿足條件我們也需要進行一次迴圈這時候我們就需要使用到do...while迴圈結構。
do…while 迴圈和 while 迴圈相似,不同的是,do…while 迴圈至少會執行一次。
do {
//代碼語句
}while(布爾表達式);
註意:布爾表達式在迴圈體的後面,所以語句塊在檢測布爾表達式之前已經執行了。 如果布爾表達式的值為 true,則語句塊一直執行,直到布爾表達式的值為 false。
例如:
public static void main(String[] args) {
int i = 0; int sum = 0;
do {
sum = sum+i; i++;
}while (i <= 100);
System.out.println("Sum= " + sum);
}
3.for迴圈:
語法格式如下:
for(初始化; 布爾表達式; 更新) {
//代碼語句
}
for迴圈說明如下:
- 最先執行初始化步驟。可以聲明一種類型,但可初始化一個或多個迴圈控制變數,也可以是空語句。
- 然後,檢測布爾表達式的值。如果為 true,迴圈體被執行。如果為false,迴圈終止,開始執行迴圈體後面的語句。
- 執行一次迴圈後,更新迴圈控制變數(迭代因數控制迴圈變數的增減)。
- 再次檢測布爾表達式。迴圈執行上面的過程。
例如:
public static void main(String[] args) {
int a = 1; //初始化
while(a<=100){ //條件判斷
System.out.println(a); //迴圈體
a+=2; //迭代
}
System.out.println("while迴圈結束!");
for(int i = 1;i<=100;i++){ //初始化//條件判斷 //迭代
System.out.println(i); //迴圈體
}
System.out.println("while迴圈結束!");
}
breake&continue
breake關鍵字:
break 主要用在迴圈語句或者 switch 語句中,用來跳出整個語句塊。break 跳出最裡層的迴圈,並且繼續執行該迴圈下麵的語句。
例如:
public static void main(String[] args) {
int i=0;
while (i<100){
i++;
System.out.println(i);
if (i==30){
break;
}
}
}
continue關鍵字:
continue 適用於任何迴圈控制結構中。作用是讓程式立刻跳轉到下一次迴圈的迭代。在 for 迴圈中,continue 語句使程式立即跳轉到更新語句。
例如:
public static void main(String[] args) {
int i=0;
while (i<100){
i++;
if (i%10==0){
System.out.println();
continue;
}
System.out.print(i);
}
}
區別:
-
break用於強行退出迴圈,不執行迴圈中剩餘的語句。(break語句也在switch語句中使用)
-
continue 語句用在迴圈語句體中,用於終止某次迴圈過程,即跳過迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判定。