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 (關係表示式) {
語句體;
}
執行流程:
- 首先判斷關係表示式,看結果值true還是false;
- 如果結果為true,就執行語句體;
- 如果結果為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"); } }
注意事項:
- 關係表示式無論簡單還是複雜,結果必須是boolean型別。
- if語句控制的語句體如果是一條語句,大括號可以省略;如果是多條語句,就不能省略。建議永遠不要省略。
- 一般來說:有左大括號就沒有分號,有分號就沒有左大括號。
格式2:
if(關係表示式) {
語句體1;
}else {
語句體2;
}
執行流程:
- 首先判斷關係表示式是true還是false;
- 如果是true,則執行語句體1;
- 如果是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的結果是true還是false;
- 如果是true,則執行語句體1;
- 如果是false,就繼續判斷表示式2,看結果是true還是false;
- 如果是true,就執行語句體2;
- 否則執行關係表示式3,看結果是true還是false
- ……
- 如果沒有任何一個關係表示式是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相似。
執行流程:
- 首先計算出表示式的值;
- 然後,和case依次比較,一旦有對應的值就會執行相應的語句;
- 在執行的過程中,遇到break就會結束;
- 如果所有的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;
}
}
}
注意事項:
- case後面的值只能是常量,並且case的值不能出現相同的;
- default可以省略(case就能將值固定的情況),但是不建議,因為它的作用是對不正確的情況給出提示;
- break可以省略(程式末尾的break可以省略),但不建議,可能出現case穿透;
- default可以出現在任意位置,建議在最後;
- switch語句的結束條件:遇到break或者 執行到程式的末尾
2.2.3 if語句和switch語句的區別
if語句使用場景:
- 針對結果是boolean型別的判斷
- 針對一個範圍的判斷
- 針對幾個常量值的判斷
switch語句使用場景:
- 針對幾個常量值的判斷
2.3 迴圈結構語句
2.3.1 概述
迴圈語句可以在滿足迴圈條件的情況下,反覆執行某一段程式碼,這段被重複執行的程式碼被稱為迴圈體語句。
當反覆執行這個迴圈體時,需要在合適的時候把迴圈判斷條件修改為false,從而結束迴圈,否則迴圈將一直執行下去,形成死迴圈。
迴圈語句的三種類型:for迴圈語句;while迴圈語句;do...while迴圈語句
2.3.2 迴圈語句的組成
1. 初始化語句:
- 一條或者多條語句,這些語句完成一些初始化操作。
2. 判斷條件語句:
- 這是一個boolean 表示式,這個表示式能決定是否執行迴圈體。
3. 迴圈體語句:
- 這個部分是迴圈體語句,也就是我們要多次做的事情。
4. 控制條件語句:
- 這個部分在一次迴圈體結束後,下一次迴圈判斷條件執行前執行。通過用於控制迴圈條件中的變數,使得迴圈在合適的時候結束。
2.3.3 for迴圈語句
for迴圈格式:
for(初始化語句;判斷條件語句;控制條件語句) {
迴圈體語句;
}
執行流程:
- 首先執行初始化語句;
- 然後執行判斷條件語句,看其結果是true還是false:
- 如果為false,迴圈結束;
- 如果為true,執行迴圈語句體;
- 接著執行控制條件語句;
- 回到2繼續,直到條件語句結果為false,迴圈結束。
for迴圈流程圖:
注意事項:
- 判斷條件語句的結果是一個boolean型別
- 迴圈體語句如果是一條語句,大括號可以省略;如果是多條語句,大括號不能省略。建議永遠不要省略。
- 一般來說:有左大括號就沒有分號,有分號就沒有左大括號
案例:
//輸出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迴圈只有在條件成立的時候才會去執行迴圈體。
注意事項:
- 優先考慮for迴圈,再考慮while迴圈,最後考慮do…while迴圈;
- 關於死迴圈——要注意控制條件語句裡控制的變數問題
- 兩種基本死迴圈格式:
- while(true){……}
- for(;;){……}
2.3.7 迴圈的巢狀使用
2.4 跳轉控制語句
Java提供了break,continue和return來實現控制語句的跳轉和中斷。
2.4.1 break中斷
break使用場景:
- switch語句中
- 迴圈語句中(迴圈語句中加入了if判斷的情況)
break的作用:
- 跳出單層迴圈
- 跳出多層迴圈,需要標籤語句的配合(格式:標籤名:語句)
案例:
//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的使用場景:
- 迴圈語句中
continue的作用:
- 跳出單層迴圈的一次,可以繼續執行下一次
案例
//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後的語句都不執行