1. 程式人生 > >java初學 流程控制語句 if…else switch ...

java初學 流程控制語句 if…else switch ...

  1. 順序語句

語句:使用分號分隔的程式碼稱作為一個語句。

注意:沒有寫任何程式碼只是一個分號的時候,也是一條語句,稱作空語句。

順序語句就是按照從上往下的順序執行的語句。

  1. 判斷(ifelse)

在我們找工作的過程中,要求兩年工作經驗以上且年齡超過30歲。

什麼是判斷語句:用於判斷的語句叫判斷語句。

1.格式一  

if(判斷條件){

如果符合條件執行的程式碼;

執行的程式碼塊1;

執行的程式碼塊2;

……………….;

執行的程式碼塊n;

}

練習:提示使用者輸入一個整數。如果該整數是5的倍數,列印“5的倍數”如果是2的倍數列印“2的倍數”

提示:為了便於讓使用者輸入資料,我們使用Scanner這個類,固定用法Scanner sc=

new Scanner(System.in); 該類需要匯入包import java.util.Scanner;

int nextInt = sc.nextInt();獲取使用者輸入的數字

import java.util.Scanner;

public class Demo9 {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

int nextInt = sc.nextInt();

if(nextInt%5==0){

System.

out.println("5的倍數");

}

if(nextInt%2==0){

System.out.println("2的倍數");

}

}

}

2.格式二

if(判斷條件){

執行的程式碼塊1;

執行的程式碼塊2;

……………….;

執行的程式碼塊n;

}else{

執行的程式碼塊1;

執行的程式碼塊2;

……………….;

執行的程式碼塊n;

}

案例:判斷一個整數是奇數還是偶數

public static void main(String[] args) {

Scanner sc =

new Scanner(System.in);

System.out.println("請輸入一個整數:");

int nextInt = sc.nextInt();

if (nextInt % 2 == 0) {

System.out.println("是偶數");

} else {

System.out.println("是奇數");

}

System.out.println("over");

}

同樣道理如果花括號中只有一條語句,那麼花括號可以省略不寫,初學者不推薦省略。

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.println("請輸入一個整數:");

int nextInt = sc.nextInt();

if (nextInt % 2 == 0)

System.out.println("是偶數");

else

System.out.println("是奇數");

System.out.println("over");

}

觀察發現if else語句有點類似於三元運算子.其實三元運算子是if else 的一種簡寫格式.

Public static void main(String[] args) {

int x = 0, y = 1, b;

// if else 語句

if (x > y) {

b = x;

} else {

b = y;

}

System.out.println(b);// 1

// 3元運算

b = x > y ? x : y;

System.out.println(b); // 1

}

這兩種格式是一樣的。if else 結構 簡寫格式: 變數 = (條件表示式)?表示式1:表示式2;

三元運算子:

好處:可以簡化if else程式碼。

弊端:因為是一個運算子,所以運算完必須要有一個結果。

3. 格式三

if(判斷條件1){

執行的程式碼塊1;

}else  if(判斷條件2){

執行語句;

}else if(判斷條件3){

執行語句;

}

需求: 根據使用者定義的數值不同,列印對應的星期英文。if 只能進行一層判斷,if else 只能進行兩層判斷,那麼需要多層判斷時呢?星期可是有7個數的。如何設計程式碼?

使用if 語句

public static void main(String[] args) {

int x = 8;

if (x == 1) {

System.out.println("星期一");

}

if (x == 2) {

System.out.println("星期二");

}

if (x == 3) {

System.out.println("星期三");

}

}

如果這樣設計的話,第一個if語句執行完畢後,第二個語句仍會執行(去判斷),是一個順序結構.那麼事實上當前定義的星期之後會有一個.假如,第一個已經符合條件,那麼剩餘的執行就沒有意義了。屬於邏輯錯誤。

使用if else ,如果使用者輸入的是7以外的資料,那麼怎麼處理?就需要使用else 了

方案2:使用if else if語句

public static void main(String[] args) {

int x = 8;

if (x == 1) {

System.out.println("星期一");

} else if (x == 2) {

System.out.println("星期二");

} else if (x == 3) {

System.out.println("星期三");

} else if (x == 4) {

System.out.println("星期四");

} else if (x == 5) {

System.out.println("星期五");

} else if (x == 6) {

System.out.println("星期六");

} else if (x == 7) {

System.out.println("星期日");

} else {

System.out.println("請輸入數字1-7");

}

}

注意:

public static void main(String[] args) {

int x = 5;

if (x == 1) {

System.out.println("1");

}

if (x == 2) {

System.out.println("2");

}

if (x == 3) {

System.out.println("3");

} else {

System.out.println("4"); // 4

}

}

該if 語句不是一個整體,第一個if 是一個語句,第二個又是一個語句,最後的if else 又是一個語句。

if語句特點

  1. 第二種格式與三元運算子的區別:三元運算子運算完要有值出現。好處是:可以寫在其他表示式中。
  2. 條件表示式無論寫成什麼樣子,只看最終的結構是否是true 或者 false。

練習1: 根據使用者輸入的月份,打印出月份所屬的季節.

練習2: 根據使用者輸入的成績,進行評級,根據學生考試成績劃分ABCD   

練習1:

public static void main(String[] args) {

int x = 1;

if (x == 3) {

System.out.println("spring");

} else if (x == 4) {

System.out.println("spring");

}

}

仔細觀察:發現if和else if要執行的語句是一樣的,可不可以合併呢。當然是可以的。怎麼合併?使用邏輯運算子,那麼使用哪個邏輯運算子呢, &肯定不行。需要全部為真才為真,月份是不可能同時滿足的 那麼使用|連線符號即可。意思只要其中一個為真,就為真。另外可以使用短路功能。

public static void main(String[] args) {

int x = 1;

if (x == 3 || x == 4 || x == 5) {

System.out.println("spring");

} else if (x == 6 || x == 7 || x == 8) {

System.out.println("Summer");

} else if (x == 9 || x == 10 || x == 11) {

System.out.println("autumn");

} else {

System.out.println("Winter");

} else {

System.out.println("月份不存在");

}

}

練習2

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.println("請輸入考試分數:");

double score = sc.nextDouble();

char grade;

if (score >= 90.0)

grade = 'A';

else if (score >= 80.0)

grade = 'B';

else if (score >= 70.0)

grade = 'C';

else if (score >= 60.0)

grade = 'D';

else

grade = 'F';

System.out.println("你的成績是:" + grade);

}

If語句常見的錯誤

1.忘記必要的括號:如果程式碼塊中只有一條語句的時候,可以省略花括號,但是當花括號將多條語句擴在一起時,花括號就不能在省略。

double radius = 4;

double area;

if (radius >= 0)

area = radius * radius * 3.14;

System.out.println("The area " + " is " + area);

double radius = 4;

double area;

if (radius >= 0) {

area = radius * radius * 3.14;

System.out.println("The area " + " is " + area);

}

雖然程式碼一樣多,但是第一個會編譯報錯(area沒有出初始化),第二個正常執行。就是因為少了花括號。所以一定要仔細。

2.if語句後出現分號

double radius = 0;

double area;

if (radius > 0); {

area = radius * radius * 3.14;

System.out.println("The area " + " is " + area);

}

注意:這是一個邏輯錯誤,編譯和執行都不會報錯,只是不會出現想要的結果。

相當於判斷符合條件後,執行一個空語句。

double radius = 0;

double area;

if (radius > 0){}{

area = radius * radius * 3.14;

System.out.println("The area " + " is " + area);

}

判斷閏年

1:什麼是閏年?可以被4整除不能被100整除,或者可以被400整除,那麼這一年就是閏年(leap year)

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.println("請輸入年份:");

int year = sc.nextInt();

// 判斷年份能否被4整除

boolean isLeapYear = (year % 4 == 0);

// 年份能被4整除,並且不能被100整除並且使用&&and

isLeapYear = isLeapYear && (year % 100 != 0);

// 年份或者能夠被400整除

isLeapYear = isLeapYear || (year % 400 == 0);

if (isLeapYear) {

System.out.println(year + "是閏年!");

}

// 簡寫格式;

if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {

System.out.println(year + "是閏年!");

}

}

  1. 選擇判斷語句(switch)

switch語句

格式:

switch(表示式)

{

case 取值1:

執行語句;

break;

case 取值2:

執行語句;

break;

…...

default:

執行語句;

break;

}

switch語句特點:

    1,switch語句選擇的型別只有四種:byte,short,int , char。

2,case之間與default沒有順序。先判斷所有的case,沒有匹配的case執行

default。

3,switch語句停止的條件是遇到了break關鍵字或者結束switch語句的大括號。

4,如果匹配的case或者default沒有對應的break,那麼程式會繼續向下執行,運

行可以執行的語句,直到遇到break或者switch結尾結束。

5,switch case中的值必須要與switch表示式的值具有相同的資料型別。而且case後跟的值必須是常量,不能跟變數。

案例:

public static void main(String[] args) {

int x = 3;

switch (x) {

case 1:

System.out.println("1");

break;

case 2:

System.out.println("2");

break;

case 3:

System.out.println("3");

break;

default:

System.out.println("ok");

break;

}

}

case 就像選擇題的答案之一。 break 就是如果該答案正確那麼就可以跳出switch 了,意思就是說 已經找出了正確的答案了。那麼這道題也就做完了。如果 case 沒有匹配接著進行下一個case 匹配,直到匹配為止。 最後如果都沒有匹配上,那麼 switch 給提供了一個預設的答案,就是 default。

注意: case後跟的是冒號:

每個case中的執行語句一定要加break;

練習:

需求2:根據用於指定的月份,列印該月份所屬的季節.

一旦case匹配,就會順序執行後面的程式程式碼,而不管後面的case是否匹配,直到遇見break,利用這一特性可以讓好幾個case執行統一語句.

345 spring   678 sunmer 9 10 11  autumn  12 1 2 winter

public static void main(String[] args) {

int x = 3;

switch (x) {

case 3:

case 4:

case 5:

System.out.println("spring");

break;

case 6:

case 7:

case 8:

System.out.println("sunmer");

break;

case 9:

case 10:

case 11:

System.out.println("autumn");

break;

case 12:

case 0:

case 1:

System.out.println("winter");

default:

System.out.println("ok");

break;

}

}

練習:char 型別在switch 中的使用.

public static void main(String[] args) {

int x = 1, y = 2;

char ch = '*';

switch (ch) {

case '+':

System.out.println("x*y=" + (x + y));

break;

case '-':

System.out.println("x-y="+(x-y));

break;

case '*':

System.out.println("x*y="+(x*y));

break;

case '/':

System.out.println("x/y="+(x/y));

break;

default:

System.out.println("不靠譜");

}

}

if 和switch 語句很像具體什麼場景下,應用哪個語句呢?

如果判斷的具體數值不多,而是符號byte,short int char 四種類型.

雖然2個語句都可以使用,建議使用switch語句.因為效率稍高.

其他情況:

對區間判斷,對結果為boolean 型別判斷,使用if if的使用範圍更廣。

if 除了能判斷具體數值還能判斷區間。switch 判斷區間會很費勁的。要寫好多case 對於運算結果是boolean型的 if 能判斷 switch 是不能實現的。例如:根據學生考試成績劃分ABCD   A90-100  B80-89 C70-79 D60-69 E0-59。

實際開發怎麼選擇呢?

    如果要對具體數值進行判斷,並且數值不多,那麼 就用switch 來完成。switch的case條件都是編譯期整數常量,編譯器可以做到表格跳轉查詢,查詢速度快。

但是switch 的侷限性比較大必須是4種類型,並且值不多。一般都是使用if。 最後在jdk 7中對switch 進行了增強 還可以判斷字串。5.0 增加了對列舉的判斷。

備註:JDK7.0開始可以使用switch可以使用字串型別的資料了.

  1. While迴圈

需求:需要列印一行字串"hello gzitcast",100次

就需要將該語句列印100遍System.out.println("hello gzitcast");

那麼如何解決該問題?

Java提供個一個稱之為迴圈的結構,用來控制一個操作的重複執行。

int count = 0;

while (count < 100) {

System.out.println("hello gzitcast");

count++;

}

System.out.println("over");

變數count初始化值為0,迴圈檢查count<100 是否為true,如果為true執行迴圈體(while後{}之間的語句),輸出"hello gzitcast"語句,然後count自增一,重複迴圈,直到count是100時,也就是count<100為false時,迴圈停止。執行迴圈之後的下一條語句。

Java提供了三種類型的迴圈語句:while迴圈,do-while迴圈和for迴圈。

1、while語句格式

while(條件表示式)

{