JAVA基礎(二)——流程控制語句、跳轉控制語句
一、流程控制語句
在一個程序執行的過程中,各條語句的執行順序對程序的結果是有直接影響的。也就是說程序的流程對運行結果有直接的影響。所以,我們必須清楚每條語句的執行流程。而且,很多時候我們要通過控制語句的執行順序來實現我們要完成的功能。
- 流程控制語句分類
- 順序結構
- 選擇結構
- 循環結構
- 順序結構
是程序中最簡單最基本的流程控制,沒有特定的語法結構,按照代碼的先後順序,依次執行,程序中大多數的代碼都是這樣執行的。總的來說:寫在前面的先執行,寫在後面的後執行.順序結構就不寫代碼演示了。
- 選擇結構
也被稱爲分支結構。
選擇結構有特定的語法規則,代碼要執行具體的邏輯運算進行判斷,邏輯運算的結果有兩個,所以產生選擇,按照不同的選擇執行不同的代碼。
Java語言提供了兩種選擇結構語句
(1)if語句
(2)switch語句
(1)if語句第一種格式:
if(關係表達式) {
語句體
}
public class IfDemo {
public static void main(String[] args) {
int x = 10;
if(x == 10) {
System.out.println("x等於10");
}
if(x == 20) {
System.out.println("x等於20");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
輸出結果:x等於10
當然if語句還有其他的格式,我們一起來學習一下吧!
if(關係表達式) {
語句體1;
}else {
語句體2;
}
需求:鍵盤錄入月份的值,輸出對應的季節。
import java.util.Scanner;
public class IfTest {
public static void main(String[] args) {
//創建鍵盤錄入對象
Scanner sc = new Scanner(System.in);
//錄入數據
System.out.println("請你輸入一個月份:");
int month = sc.nextInt();
if(month<1 || month>12) {
System.out.println("你輸入的月份有誤");
}else if(month>=3 && month<=5) {
System.out.println("春季");
}else if(month>=6 && month<=8) {
System.out.println("夏季");
}else if(month>=9 && month<=11) {
System.out.println("秋季");
}else {
System.out.println("冬季");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
輸出結果:根據你鍵盤的輸入值的大小會得到相應的結果,比如輸入3,結果爲:春季。
我們來說下怎麼實現鍵盤錄入呢?
1、導包import java.util.Scanner;在class上面。
2、創建鍵盤錄入對象:Scanner sc = new Scanner(System.in);
3、通過對象獲取數據:int x = sc.nextInt();
這樣讓我們的程序就變得更加靈活了一些。
(2)switch語句
switch語句格式:
switch(表達式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
…
default:
語句體n+1;
break;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
執行流程
首先計算出表達式的值
其次,和case依次比較,一旦有對應的值,就會執行相應的語句,在執行的過程中,遇到break就會結束。
最後,如果所有的case都和表達式的值不匹配,就會執行default語句體部分,然後程序結束掉。
我們一起來寫一個Demo吧!
import java.util.Scanner;
public class SwitchDemo {
public static void main(String[] args) {
//創建鍵盤錄入對象
Scanner sc = new Scanner(System.in);
//控制鍵盤錄入數據
System.out.println("請輸入一個數據(1-7):");
int week = sc.nextInt(); //3
//switch判斷語句
switch(week) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("你輸入的數據有誤");
break;
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
輸出結果:根據你鍵盤的輸入值的大小會得到相應的結果,比如輸入4,結果爲:星期四。
循環結構
- for循環
- while循環
- do…while循環
我們來逐個學習
- for循環語句
for循環語句格式:
for(初始化語句;判斷條件語句;控制條件語句) {
循環體語句;
}
- 1
- 2
- 3
- 1
- 2
- 3
執行流程:
A:執行初始化語句
B:執行判斷條件語句,看其結果是true還是false
如果是false,循環結束。
如果是true,繼續執行。
C:執行循環體語句
D:執行控制條件語句
E:回到B繼續
我們來一起做個經典的練習吧!
需求:統計”水仙花數”共有多少個?
分析:
A:首先必須知道什麼是水仙花數
所謂的水仙花數是指一個三位數,其各位數字的立方和等於該數本身。
舉例:153就是一個水仙花數。
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
B:定義統計變量,初始化值是0
C:三位數告訴了我們範圍,用for循環就可以搞定
D:獲取每一個三位數的個,十,百的數據
E:按照要求進行判斷
F:如果滿足要求就計數。
public class ShuixianhuaDemo {
public static void main(String[] args) {
//定義統計變量,初始化值是0
int count=0;
//三位數告訴了我們範圍,用for循環就可以搞定
for (int i = 100; i < 1000; i++) {
//獲取每一個三位數的個,十,百的數據
int ge = i%10;
int shi = i/10%10;
int bai = i/10/10%10;
//按照要求進行判斷
if(i == (ge*ge*ge+shi*shi*shi+bai*bai*bai)){
//如果滿足要求就計數。
count++;
System.out.println("水仙花數是:"+bai+""+shi+""+ge);
}
}
System.out.println("水仙花數共有"+count+"個");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
輸出結果爲:
水仙花數是:153
水仙花數是:370
水仙花數是:371
水仙花數是:407
水仙花數共有4個
2.while循環語句
while循環語句格式:
while(判 斷條件語句) {
循環體語句;
}
- 1
- 2
- 3
- 1
- 2
- 3
while循環和for循環可以等價轉換,但還是有些小區別的:
for循環適合針對一個範圍判斷進行操作
while循環適合判斷次數不明確操作
我們一起來做個練習。
需求:我國最高山峯是珠穆朗瑪峯:8848m,我現在有一張足夠大的紙張,厚度爲:0.01m。
請問,我摺疊多少次,就可以保證厚度不低於珠穆朗瑪峯的高度?
public class WhileDemo {
public static void main(String[] args) {
//定義一個統計變量,默認值是0
int count = 0;
//最高山峯是珠穆朗瑪峯:8848m這是最終的厚度
//我現在有一張足夠大的紙張,厚度爲:0.01m這是初始厚度
//爲了簡單,我把0.01變成1,同理8848就變成了884800
int end = 884800;
int start = 1;
while(start<end) {
//只要每次變化的厚度沒有超過珠穆朗瑪峯的高度,就摺疊,統計變量++
count++;
//摺疊一次有什麼變化呢?就是厚度是以前的2倍。
start *= 2;
System.out.println("第"+count+"次厚度是"+start);
}
//輸出統計變量。
System.out.println("要疊"+count+"次");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
輸出結果:
第1次厚度是2
第2次厚度是4
第3次厚度是8
第4次厚度是16
第5次厚度是32
第6次厚度是64
第7次厚度是128
第8次厚度是256
第9次厚度是512
第10次厚度是1024
第11次厚度是2048
第12次厚度是4096
第13次厚度是8192
第14次厚度是16384
第15次厚度是32768
第16次厚度是65536
第17次厚度是131072
第18次厚度是262144
第19次厚度是524288
第20次厚度是1048576
要疊20次
3.do…while循環語句
do…while循環語句格式:
do {
循環體語句;
}while((判 斷條件語句);
- 1
- 2
- 3
- 1
- 2
- 3
do…while循環語句和上面的兩種循環語句又有什麼區別呢?我們來漲姿勢
區別:do…while循環至少會執行一次循環體。
for循環和while循環只有在條件成立的時候纔會去執行循環體
注意:
寫程序優先考慮for循環,再考慮while循環,最後考慮do…while循環。
while(true){}和for(;;){}都是死循環
public class DoWhileDemo {
public static void main(String[] args) {
int y = 5;
do {
System.out.println("我愛java");
y++;
}while(y < 10);
System.out.println("我愛Android ");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
輸出結果:
我愛java
我愛java
我愛java
我愛java
我愛java
我愛Android
我們學習了這麼多的循環語句,下來我們一起來學習一下循環嵌套使用,就是語句中還有語句。一起寫幾個Demo來學習一下吧!
需求:請輸出一個4行5列的星星(*)圖案。
public class StarDemo {
public static void main(String[] args) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
System.out.print("*");
}
//我們可以通過空的輸出語句實現換行
System.out.println();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
輸出結果:
需求:在控制檯輸出九九乘法表。
public class ChengFaDemo {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
for (int j = 1; j <i+1; j++) {
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println("");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
輸出結果:
二、跳轉控制語句
Java提供了break,continue和return來實現控制語句的跳轉和中斷。
- break 中斷
- continue 繼續
- return 返回 4
break的使用場景:
- 在選擇結構switch語句中
- 在循環語句中
- 離開使用場景的存在是沒有意義的
break的作用:
- 跳出循環
public class BreakDemo {
public static void main(String[] args) {
//跳出循環
for(int x=0; x<10; x++) {
if(x == 3) {
break;
}
System.out.println("HelloWorld");
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
輸出結果:控制檯打印了3遍HelloWorld。說明break跳出了循環
continue的使用場景:
- 在循環語句中
- 離開使用場景的存在是沒有意義的
continue的作用:
- 單層循環和break對比後得到的結論:
- break 退出當前循環
- continue 退出本次循環
public class ContinueDemo {
public static void main(String[] args) {
for(int x=0; x<10; x++) {
if(x == 3) {
continue;
}
System.out.println(x);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
輸出結果:0 1 2 4 5 6 7 8 9 。唯獨沒有3.可以說明,continue跳出一次循環,進入下一次的執行
return關鍵字不是爲了跳轉出循環體,更常用的功能是結束一個方法,也就是退出一個方法。跳轉到上層調用的方法。
關於return,等我們學了方法後,會詳細講解。
好了,就說這麼多吧,下次一起來學習方法還有更多,好期待。
第二次學java基礎,有很多不一樣的收穫。大家加油!