------- android培訓、java培訓、期待與您交流! ----------
在程序執行的過程中,有時候我們需要根據不同的結果來執行不同的代碼,或者是同樣的代碼我想執行多次,如果按照普通的做法來寫程序的話,會使得代碼的重複性太高,這時候就需要使用到流程控制語句,在java中,java提供了以下幾種流程控制語句。
一、順序結構
順序結構就是一條一條代碼往下執行。這個就不多說了。
二、選擇結構
選擇結構是根據不同的結果來執行不同的代碼,在java中使用if語句來進行這樣的操作
格式1:
if(比較表達式) {
語句體;
}
執行流程:
判斷比較表達式的值,看是true還是false
如果是true,就執行語句體
如果是false,就不執行語句體
格式2:
if(比較表達式) {
語句體1;
}else {
語句體2;
}
執行流程:
判斷比較表達式的值,看是true還是false
如果是true,就執行語句體1
如果是false,就執行語句體2
格式3:
if(比較表達式1) {
語句體1;
}else if(比較表達式2){
語句體2;
}
...
else {
語句體n+1;
}
執行流程:
判斷比較表達式1的值,看是true還是false
如果是true,就執行語句體1
如果是false,就繼續判斷比較表達式2的值,看是true還是false
如果是true,就執行語句體2
如果是false,就繼續判斷比較表達式3的值,看是true還是false
...
如果都不滿足,就執行語句體n+1
(2)注意事項
A:比較表達式無論簡單還是複雜,結果是boolean類型
B:if語句控制的語句體如果是一條語句,是可以省略大括號的;如果是多條,不能省略。
建議:永遠不要省略。
C:一般來說,有左大括號,就沒有分號,有分號,就沒有左大括號。
D:else後面如果沒有if,是不會出現比較表達式的。
E:三種if語句其實都是一個語句,只要有一個執行,其他的就不再執行。
代碼演示:
package day03;
import java.util.Scanner;
public class Operator04 {
public static void main(String[] args) {
int a = 5;
int b = 10;
//比較兩個數是否相等
if(a == b){
System.out.println("5和10相等");
}
//獲取兩個數的最大值
if(a > b){
int max = a;
System.out.println("max="+max);
}else{
int max = b;
System.out.println("max="+max);
}
//根據成績判斷等級
Scanner sc = new Scanner(System.in); //用於用戶鍵盤輸入的
int score = sc.nextInt();
if(score >= 90 && score < 101){
System.out.println("A");
}else if(score >= 75 && score < 90){
System.out.println("B");
}else if(score >= 60 && score < 75){
System.out.println("C");
}else if(score >= 0 && score < 60){
System.out.println("D");
}else{
System.out.println("數據輸入錯誤");
}
}
}
選擇語句還有另外一種,就是switch
switch語句的格式:
switch(表達式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
...
default:
語句體n+1;
break;
}
格式解釋說明:
switch:說明這是switch語句。
表達式:可以是byte,short,int,char
JDK5以後可以是枚舉
JDK7以後可以是字符串
case:後面的值就是要和表達式進行比較的值
break:表示程序到這裏中斷,跳出switch語句
default:如果所有的情況都不匹配,就執行這裏,相當於if語句中的else
(2)面試題
switch語句的表達式可以是byte嗎?可以是long嗎?可以是String嗎?
可以,不可以,JDK7以後可以
(3)執行流程:
A:首先計算表達式的值
B:和每一個case進行匹配,如果有就執行對應的語句體,看到break就結束。
C:如果沒有匹配,就執行default的語句體n+1。
(4)注意事項:
A:case後面只能是常量,不能是變量,而且,多個case後面的值不能出現相同的
B:default可以省略嗎?
可以省略,但是不建議,因爲它的作用是對不正確的情況給出提示。
特殊情況:
case就可以把值固定。
A,B,C,D
C:break可以省略嗎?
可以省略,但是結果可能不是我們想要的。
會出現一個現象:case穿透。
最終我們建議不要省略
D:default一定要在最後嗎?
不是,可以在任意位置。但是建議在最後。
E:switch語句的結束條件
a:遇到break就結束了
b:執行到末尾就結束了
代碼演示:
import java.util.Scanner;
//根據鍵盤錄入的數字輸出對應的星期幾
class SwitchDemo2 {
public static void main(String[] args) {
//創建鍵盤錄入對象
Scanner sc = new Scanner(System.in);
//控制鍵盤錄入數據
System.out.println("請輸入一個數據(1-7):");
int week = sc.nextInt(); //3
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;
}
}
}
三、循環結構
java中的循環結構有三種,分別是for、while、do...while
1、for語句
格式:
for(初始化語句;判斷條件語句;控制條件語句){
循環體語句;
}
執行流程:
a:執行初始化語句
b:執行判斷條件語句
如果這裏是true,就繼續
如果這裏是false,循環就結束
c:執行循環體語句
d:執行控制條件語句
e:回到b
class ForDemo3 {
public static void main(String[] args) {
//原始做法
System.out.println(1+2+3+4+5+6+7+8+9+10);
//定義第一個加數
int sum = 0;
for(int x=1; x<=10; x++) {
//這裏的x其實是第二個加數
sum = sum + x;
/*
0 + 1 = 1
1 + 2 = 3
3 + 3 = 6
...
*/
//sum += x;
}
System.out.println("sum:"+sum);
}
}
2、while語句
格式:
while(判斷條件語句) {
循環體語句;
}
/*
我國最高山峯是珠穆朗瑪峯:8848m,我現在有一張足夠大的紙張,厚度爲:0.01m。
請問,我摺疊多少次,就可以保證厚度不低於珠穆朗瑪峯的高度?
分析:
A:定義一個統計變量,默認值是0
B:最高山峯是珠穆朗瑪峯:8848m這是最終的厚度
我現在有一張足夠大的紙張,厚度爲:0.01m這是初始厚度
C:我摺疊多少次,就可以保證厚度不低於珠穆朗瑪峯的高度?
摺疊一次有什麼變化呢?就是厚度是以前的2倍。
D:只要每次變化的厚度沒有超過珠穆朗瑪峯的高度,就摺疊,統計變量++
E:輸出統計變量。
*/
class WhileDemo5 {
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+"次");
}
}
3、do...while語句
格式:
do {
循環體語句;
}while(判斷條件語句);
代碼演示:
class DoWhileDemo {
public static void main(String[] args) {
//輸出10次HelloWorld。
int x = 0;
do {
System.out.println("HelloWorld");
x++;
}while(x<10);
System.out.println("--------------");
//求和1-100
int sum = 0;
int a = 1;
do {
sum += a;
a++;
}while(a<=100);
System.out.println(sum);
}
}
do...while和while的區別
while只有當條件符合時,纔會執行其中的代碼塊
do..while會執行一次其中的代碼塊再進行判斷
4、中斷語句
break:跳出當前循環
continue:結束當前循環,進入下一次循環
return:多用於方法的返回,一旦執行return語句,程序不再往下執行