1. 程式人生 > >Java基礎語法之語句

Java基礎語法之語句

目錄

1. 語句的作用

可以控制程式的執行流程

2. 語句的分類

  • 順序結構語句
  • 選擇結構語句
  • 迴圈結構語句

2.1 順序結構語句

2.1.1 概述

是程式中最簡單最基本的流程控制,沒有特定的語法結構,按照程式碼的先後順序,依次執行,程式中大多數的程式碼都是這樣執行的

2.1.2 執行流程

寫在前面的先執行,寫在後面的後執行

順序結構圖:

2.2 選擇結構語句

2.2.1 概述

也被稱為分支結構。

選擇結構有特定的語法規則,程式碼要執行具體的邏輯運算(結果為true或false)進行判斷,根據結果選擇執行相應的程式碼。

Java語言提供了兩種選擇結構的語句:if語句 switch語句

2.2.2 if語句的三種格式

格式1

if (關係表示式) {
    語句體;
}

執行流程

  1. 首先判斷關係表示式,看結果值true還是false;
  2. 如果結果為true,就執行語句體;
  3. 如果結果為false,就不執行語句體。

格式1流程圖

案例1:

//導包
import java.util.Scanner;

class IfDemo1 {
    public static void main(String[] args) {
		//建立鍵盤錄入物件
        Scanner sc = new Scanner(System.in);
		//控制檯輸出提示語句
		System.out.println("請輸入一個數");
		//通過物件sc呼叫nextInt()得到int型別資料
		int x = sc.nextInt();
		//判斷輸入的數是否等於10
        if (x == 10) {
        System.out.println("x等於10");
        }
		//判斷輸入的數是否等於20
        if (x == 20) {
        System.out.println("x等於20");
        }
		//輸出結束語句
        System.out.println("OVER");
    }
}

注意事項

  1. 關係表示式無論簡單還是複雜,結果必須是boolean型別。
  2. if語句控制的語句體如果是一條語句,大括號可以省略;如果是多條語句,就不能省略。建議永遠不要省略。
  3. 一般來說:有左大括號就沒有分號,有分號就沒有左大括號。

格式2:

if(關係表示式) {
    語句體1;
}else {
    語句體2;
}

執行流程

  1. 首先判斷關係表示式是true還是false;
  2. 如果是true,則執行語句體1;
  3. 如果是false,則執行語句體2。

格式2流程圖

案例2:鍵盤錄入兩個數,判斷其是否相等

//導包
import java.util.Scanner;

class IfDemo2 {
	public static void main(String[] args) {
		//建立鍵盤錄入物件
		Scanner sc = new Scanner(System.in);
		
		System.out.println("請輸入第一個數:");
		int a = sc.nextInt();
		
		System.out.println("請輸入第二個數:");
		int b = sc.nextInt();
		
		//判斷兩個數是否相等
		if (a == b) {
			System.out.println("兩個數相等");
		}else {
			System.out.println("兩個數不相等");
		}
		System.out.println("OVER");
	}
}

if語句和三元運算的相互轉換:

三元運算子實現的都可以採用if語句實現,反之不成立

當if語句體為輸出語句時不能用三元運算子實現。因為三元運算子是一個運算子,運算子操作完畢應該有一個結果而不是輸出

案例3:獲取兩個資料中的最大值

//導包
import java.util.Scanner;

class IfDemo3 {
	public static void main(String[] args) {
		//建立鍵盤錄入物件
		Scanner sc = new Scanner(System.in);
		
		System.out.println("請輸入第一個數:");
		int a = sc.nextInt();
		
		System.out.println("請輸入第二個數:");
		int b = sc.nextInt();
		//if語句,“輸出”較大值
		if (a > b) {
			System.out.println("較大的值是:"+a);
		}else {
			System.out.println("較大的值是:"+b);
		}
		
	}
}
//導包
import java.util.Scanner;

class IfDemo3 {
	public static void main(String[] args) {
		//建立鍵盤錄入物件
		Scanner sc = new Scanner(System.in);
		
		System.out.println("請輸入第一個數:");
		int a = sc.nextInt();
		
		System.out.println("請輸入第二個數:");
		int b = sc.nextInt();
		//不能在if語句裡定義max
		int max;
		//if語句賦值操作
		if (a > b) {
			max = a;
		}else {
			max = b;
		}
		System.out.println("Max="+max);
	}
}

三元改進

//導包
import java.util.Scanner;

class IfDemo3 {
	public static void main(String[] args) {
		//建立鍵盤錄入物件
		Scanner sc = new Scanner(System.in);
		
		System.out.println("請輸入第一個數:");
		int a = sc.nextInt();
		
		System.out.println("請輸入第二個數:");
		int b = sc.nextInt();
		
		//三元改進
		int max = (a > b)?a:b;
		System.out.println("Max="+max);
	}
}

格式3:

if(關係表示式1) {
    語句體1;
}else if(關係表示式2) {
    語句體2;
}else if(關係表示式3) {

    語句體3;
}
……
else {
    語句體n+1;
}

執行流程

  1. 首先計算關係表示式1的結果是true還是false;
  2. 如果是true,則執行語句體1;
  3. 如果是false,就繼續判斷表示式2,看結果是true還是false;
  4. 如果是true,就執行語句體2;
  5. 否則執行關係表示式3,看結果是true還是false
  6. ……
  7. 如果沒有任何一個關係表示式是true,就執行語句體n+1.

格式3流程圖:

案例4:通過把學生考試成績分等級來引出if語句的第三種格式   

 90-100    優秀   ;  80-90    好    ; 70-80    良    ; 60-70    及格   ;  60一下    不及格(注意正確資料、邊界資料、錯誤資料)

//導包
import java.util.Scanner;

class IfDemo4 {
	public static void main(String[] args) {
		//建立鍵盤錄入物件
		Scanner sc = new Scanner(System.in);
		System.out.println("請輸入學生的成績(0~100):");
		int score = sc.nextInt();
		//if語句
		if(score >= 90 && score <= 100) {
			System.out.println("優秀");
		}else if(score >= 80 && score < 90) {
			System.out.println("良");
		}else if(score >= 70 && score < 80) {
			System.out.println("好");
		}else if(score >= 60 && score < 70) {
			System.out.println("及格");
		}else if(score >=0 && score < 60) {
			System.out.println("不及格");
		}else {
			System.out.println("你輸入的成績有誤");
		}
	}
}

2.2.2 switch語句

switch語句格式:

switch(表示式) {
    case 值1:
        語句體1;
        break;
    case 值2:
        語句體2;
        break;
    ……
    default:
        語句體n+1;
        break;
}

格式解釋:

switch表示這是switch語句

表示式的取值:byte,short,int,char

JDK5以後可以是列舉,JDK7以後可以是String

case後面跟的是要和表示式進行比較的值

語句體部分可以是一條或多條語句

break表示中斷,結束的意思,可以結束switch語句

default語句表示所有情況都不匹配的時候,就執行該處的內容,和if語句的else相似。

執行流程:

  1. 首先計算出表示式的值;
  2. 然後,和case依次比較,一旦有對應的值就會執行相應的語句;
  3. 在執行的過程中,遇到break就會結束;
  4. 如果所有的case都和表示式的值不匹配,就執行default語句體部分,然後程式結束。

switch語句流程圖:

案例:根據鍵盤錄入的數值1,2,3,…7輸出對應的星期一,星期二,星期三…星期日。

//導包
import java.util.Scanner;

class SwitchDemo1 {
	public static void main(String[] args) {
		//建立錄入物件
		Scanner sc = new Scanner(System.in);
		System.out.println("請輸入一個數(1~7):");
		int x = sc.nextInt();
		//switch語句
		switch(x) {
			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. case後面的值只能是常量,並且case的值不能出現相同的;
  2. default可以省略(case就能將值固定的情況),但是不建議,因為它的作用是對不正確的情況給出提示;
  3. break可以省略(程式末尾的break可以省略),但不建議,可能出現case穿透;
  4. default可以出現在任意位置,建議在最後;
  5. switch語句的結束條件:遇到break或者 執行到程式的末尾

2.2.3 if語句和switch語句的區別

if語句使用場景:

  1. 針對結果是boolean型別的判斷
  2. 針對一個範圍的判斷
  3. 針對幾個常量值的判斷

switch語句使用場景:

  1. 針對幾個常量值的判斷

2.3 迴圈結構語句

2.3.1 概述

迴圈語句可以在滿足迴圈條件的情況下,反覆執行某一段程式碼,這段被重複執行的程式碼被稱為迴圈體語句。

當反覆執行這個迴圈體時,需要在合適的時候把迴圈判斷條件修改為false,從而結束迴圈,否則迴圈將一直執行下去,形成死迴圈。

迴圈語句的三種類型:for迴圈語句;while迴圈語句;do...while迴圈語句

2.3.2 迴圈語句的組成

1. 初始化語句

  • 一條或者多條語句,這些語句完成一些初始化操作。

2. 判斷條件語句

  • 這是一個boolean 表示式,這個表示式能決定是否執行迴圈體。

3. 迴圈體語句

  • 這個部分是迴圈體語句,也就是我們要多次做的事情。

4. 控制條件語句

  • 這個部分在一次迴圈體結束後,下一次迴圈判斷條件執行前執行。通過用於控制迴圈條件中的變數,使得迴圈在合適的時候結束。

2.3.3 for迴圈語句

for迴圈格式:

for(初始化語句;判斷條件語句;控制條件語句) {
    迴圈體語句;
}

執行流程:

  1. 首先執行初始化語句;
  2. 然後執行判斷條件語句,看其結果是true還是false:
    1. 如果為false,迴圈結束;
    2. 如果為true,執行迴圈語句體;
  3. 接著執行控制條件語句;
  4. 回到2繼續,直到條件語句結果為false,迴圈結束。

for迴圈流程圖:

注意事項:

  1. 判斷條件語句的結果是一個boolean型別
  2. 迴圈體語句如果是一條語句,大括號可以省略;如果是多條語句,大括號不能省略。建議永遠不要省略。
  3. 一般來說:有左大括號就沒有分號,有分號就沒有左大括號

案例:

//輸出1——10
class ForDemo2 {
	public static void main(String[] args) {
		for(int x = 1;x <= 10;x++) {
		System.out.println(x);
		}
	}
}
//求1——10之間數的和
class ForDemo3 {
	public static void main(String[] args) {
		int sum = 0;
		for(int i = 1;i <=10;i++) {
			sum += i;
		}
		System.out.println(sum);
	}
}
//求1——10之間偶數的和
//錯誤程式碼
class ForDemo4 {
	public static void main(String[] args) {
		int sum = 0;
                //條件語句為false,迴圈直接結束輸出sum=0
		for(int x = 1;(x <= 10 )&& (x % 2 == 0);x++ ) {
			sum += x;
		}
		System.out.println("sum ="+sum);//輸出結果為0
	}
}


//正確程式碼
class ForDemo4 {
	public static void main(String[] args) {
		int sum = 0;
		for(int x = 1;x <= 10;x++) {
                        //注意=和==的區別
			if (x%2 == 0){
				sum += x;
			}
		}
		System.out.println("sum ="+sum);//輸出結果為30
	}
}
//求5的階乘
class ForDemo5 {
	public static void main(String[] args) {
		int n = 1;
		for(int i = 1;i <=5;i++) {
			n *= i; 
		}
		System.out.println(n);
	}
}

2.3.4 while迴圈語句

基本格式

while(判斷條件語句) {
    迴圈體語句;
}

擴充套件格式:

初始化語句;
while(條件判斷語句){
    迴圈體語句;
    控制條件語句;
}

while迴圈流程圖:

案例:

//用while求1——100之和
class WhileDemo1 {
	public static void main(String[] args) {
		int x = 1;
		int sum = 0;
		while(x <= 100){
			sum +=x;
			x++;
		}
		System.out.println("sum = "+ sum);
	}
}

for迴圈和while迴圈的區別

for迴圈語句和while迴圈語句可以等價轉換,但還是有些小區別的

使用區別

控制條件語句所控制的那個變數,在for迴圈結束後,就不能再被訪問到了,而while迴圈結束還可以繼續使用,如果你想繼續使用,就用while,否則推薦使用for。原因是for迴圈結束,該變數就從記憶體中消失,能夠提高記憶體的使用效率。

場景區別

for迴圈適合針對一個範圍判斷進行操作 while迴圈適合判斷次數不明確操作

2.3.5 do…while迴圈語句

基本格式:

do {
    迴圈體語句;
}while(判斷條件語句);

擴充套件格式:

初始化語句;
do {
    迴圈體語句;
    控制條件語句;
}while(判斷條件語句);

執行流程圖:

2.3.6 三種迴圈語句的區別及注意事項

迴圈語句的區別:

do…while迴圈至少會執行一次迴圈體;

而for迴圈和while迴圈只有在條件成立的時候才會去執行迴圈體。

注意事項:

  1. 優先考慮for迴圈,再考慮while迴圈,最後考慮do…while迴圈;
  2. 關於死迴圈——要注意控制條件語句裡控制的變數問題
  3. 兩種基本死迴圈格式:
    1.  while(true){……}
    2. for(;;){……}

2.3.7 迴圈的巢狀使用

2.4 跳轉控制語句

Java提供了break,continue和return來實現控制語句的跳轉和中斷。

2.4.1 break中斷

break使用場景:

  1. switch語句中
  2. 迴圈語句中(迴圈語句中加入了if判斷的情況)

break的作用:

  1. 跳出單層迴圈
  2. 跳出多層迴圈,需要標籤語句的配合(格式:標籤名:語句)

案例:

//break語句
class BreakDemo1 {
	public static void main(String[] args) {
		for(int x = 1;x <= 5;x++) {
			//跳出單層迴圈
			if(x == 3) {
				break;
			}
			System.out.println(x);
		}
		System.out.println("OVER");
	}
}
/*
輸出結果:
1
2
OVER
*/
//break語句
class BreakDemo2 {
	public static void main(String[] args) {
		wc:for(int x=1;x<=3;x++) {
			nc:for(int y=1;y<=5;y++){
				//跳出單層迴圈(內迴圈)
				if(y==3){
					break nc;
				}
				System.out.print("*");
			}
			System.out.println();
		}
	}
}
/*
輸出結果:
**
**
**
*/
//break語句
class BreakDemo2 {
	public static void main(String[] args) {
		wc:for(int x=1;x<=3;x++) {
			nc:for(int y=1;y<=5;y++){
				//跳出多層迴圈(外層迴圈)
				if(y==3){
					break wc;
				}
				System.out.print("*");
			}
			System.out.println();
		}
	}
}
/*
輸出結果:
**
*/

2.4.2 continue繼續

continue的使用場景:

  1. 迴圈語句中

continue的作用:

  1. 跳出單層迴圈的一次,可以繼續執行下一次

案例

//continue語句
class ContinueDemo {
	public static void main(String[] args) {
		for(int x = 1;x <= 5;x++) {
			//跳出一次迴圈
			if(x == 3) {
				continue;
			}
			System.out.println(x);
		}
		System.out.println("OVER");
	}
}
/*
輸出結果:
1
2
4
5
OVER
*/

與break的區別:

break直接結束迴圈

continue只跳一次迴圈,下次迴圈繼續執行

2.4.3 return返回

return作用:用於結束方法,方法內return後的語句都不執行