Java 基本語法---流程控制

Java 基本語法---流程控制


0. 概述

三大流程控制語句:順序、選擇、循環。java

選擇結構:express

  • if 結構,if - else結構;
  • 多重 if - else 語句 ;
  • 嵌套 if - else 語句 ;
  • switch 結構 ;

循環結構:數組

  • while 循環, do - while 循環, for循環 ;
  • Java加強for循環
  • 循環嵌套

1. 選擇結構

1.1 if 結構

一個if語句包含一個布爾表達式和一條或多條執行語句;code

布爾表達式值爲true,執行if 語句;ip

格式:作用域

if(布爾表達式)
{
    //布爾表達式值爲true,執行語句;
}

1.2 if - else 結構

布爾表達式值爲true,執行 if 語句;it

布爾表達式值爲false,執行 else 語句;io

格式:for循環

if(布爾表達式)
{
    //布爾表達式值爲true,執行語句;
}
else
{
    //布爾表達式值爲false,執行語句;
}

1.3 多重 if - else 結構

格式:class

if(布爾表達式1) 
{
    //布爾表達式1值爲true,執行語句;
}
else if(布爾表達式2)
{
    //布爾表達式2值爲true,執行語句;
}
else if(布爾表達式3)
{
    //布爾表達式值3爲true,執行語句;
}
else
{
    //若是以上全部表達式的值都爲false,則執行語句;
}

1.4 if 嵌套結構

格式:

if(布爾表達式1)
{
    //布爾表達式1值爲true,執行語句
    if(布爾表達式2)
    {
        //布爾表達式2值爲true,執行語句
    }
}

1.5 switch結構

格式:

switch(常量值/expression)
{
    case value1:
    //執行語句
    break;  //可選
    
    case value2:
    //執行語句
    break;  //可選
    
    ......
    default :
    //執行語句
}

switch語句有以下規則:

  • switch語句中的變量類型只能爲byte、short、int或者char。
  • switch語句能夠擁有多個case語句。每一個case後面跟一個要比較的值和冒號。
  • case語句中的值的數據類型必須與變量的數據類型相同,並且只能是常量或者字面常量。
  • 當變量的值與case語句的值相等時,那麼case語句以後的語句開始執行,直到break語句出現纔會跳出switch語句。
  • 當遇到break語句時,switch語句終止。程序跳轉到switch語句後面的語句執行。case語句沒必要需要包含break語句。若是沒有break語句出現,程序會繼續執行下一條case語句,直到出現break語句。
  • switch語句能夠包含一個default分支,該分支必須是switch語句的最後一個分支。default在沒有case語句的值和變量值相等的時候執行。default分支不須要break語句。

1.6 if 和 switch 區別

if 結構

  • 判斷條件爲布爾類型(布爾表達式)
  • 判斷條件是一個範圍

switch 結構

  • 判斷條件爲常量值

1.7 案例1--輸出九九乘法表

public class MultiplicationTable {
    public static void main(String[] args) {
        for (int i = 1;  i <= 9; ++i)
        {
            for (int j = 1; j <= 9; j++)
            {
                if(j < i)
                {
                    //輸出的空格由"%d * %d = %2d "決定
                    System.out.print("            ");
                }
                else
                {
                    System.out.printf("%d * %d = %2d ", i ,j , i*j);
                }
            }
            System.out.println();
        }
    }
}

Output:
1 * 1 =  1 1 * 2 =  2 1 * 3 =  3 1 * 4 =  4 1 * 5 =  5 1 * 6 =  6 1 * 7 =  7 1 * 8 =  8 1 * 9 =  9 
           2 * 2 =  4 2 * 3 =  6 2 * 4 =  8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18 
                      3 * 3 =  9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27 
                                 4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36 
                                            5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45 
                                                       6 * 6 = 36 6 * 7 = 42 6 * 8 = 48 6 * 9 = 54 
                                                                  7 * 7 = 49 7 * 8 = 56 7 * 9 = 63 
                                                                             8 * 8 = 64 8 * 9 = 72 
                                                                                        9 * 9 = 81

1.8 案例2--輸出某一年的某一天有多少天

public class Days {
    public static void main(String[] args) {
        int days = 0;
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入要肯定的年份:");
        int year = sc.nextInt();
        System.out.println("請輸入要肯定的月份:");
        int month = sc.nextInt();

        switch (month)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                days = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                days = 30;
                break;
            case 2:
                if((year %400 == 0) || (year % 100 != 0 && year %4 == 0))
                {
                    days = 29;
                    break;
                }
                else
                {
                    days = 28;
                    break;
                }
            default:
                System.out.println("您輸入的月份有誤!");
                System.exit(0);
        }
        System.out.printf("%4d 年 %2d 月 共有 %2d 天\n",year,month,days);
    }
}

Output:
請輸入要肯定的年份:
2018
請輸入要肯定的月份:
02
2018 年  2 月 共有 28 天

請輸入要肯定的年份:
2008
請輸入要肯定的月份:
02
2008 年  2 月 共有 29 天

2.循環結構

2.1 while循環

只要布爾表達式值爲true,就會執行循環內容。直到布爾表達式值爲false,退出循環;

while(布爾表達式)
{
    //布爾表達式值爲true,執行循環內容
}

2.2 do ... while 循環

只要布爾表達式值爲true,就會執行循環內容。直到布爾表達式值爲false,退出循環;和while相似,不一樣的是do...while語句至少會被執行一次;

do
{
    //布爾表達式值爲true,執行循環內容
}while(布爾表達式)

2.3 for循環

for循環執行次數在執行前肯定。

for(初始化;布爾表達式;更新)
{
    //執行代碼
}

關於for的幾點說明:

  • 最早執行初始化步驟。能夠聲明一種類型,但可初始化一個或多個循環控制變量,也能夠是空語句。
  • 而後,檢測布爾表達式的值。若是爲true,循環體被執行。若是爲false,循環終止,開始執行循環體後面的語句。
  • 執行一次循環後,更新循環控制變量。
  • 再次檢測布爾表達式。循環執行上面的過程。

2.4 Java加強for循環

聲明語句:聲明新的局部變量,該變量的類型必須和數組元素的類型匹配。其做用域限定在循環語句塊,其值與此時數組元素的值相等。

表達式:表達式是要訪問的數組名,或者是返回值爲數組的方法。

for(聲明語句:表達式)
{
    //執行代碼
}

2.5 案例1--循環輸出26個英文小寫字母,要求分兩行輸出

public class OutputLetters {
    public static void main(String[] args) {
        //循環輸出26個英文小寫字母,要求分兩行輸出
        char ch = 'a';
        int count = 0;//控制換行
        while(ch <= 'z')
        {
            System.out.printf(ch + " ");
            ch ++;
            count ++;

            if (count % 13 == 0)
            {
                System.out.println();
            }
        }

        System.out.println();
        ch = 'a';
        count = 0;
        for(count = 1, ch = 'a';ch <= 'z';ch ++,count ++)
        {
            System.out.printf(ch + " ");
            if (count % 13 == 0)
            {
                System.out.println();
            }
        }

    }
}

Output:
a b c d e f g h i j k l m 
n o p q r s t u v w x y z 

a b c d e f g h i j k l m 
n o p q r s t u v w x y z

2.6 break

break語句

  • break語句能夠結束當前循環的執行;
  • 執行完break語句,循環體中位於break語句後面的語句就不會被執行;
  • 在多重循環嵌套中,break語句至關於向外跳一層;

2.7 continue

continue語句:

  • continue語句只能用在循環裏;
  • continue語句能夠結束當前循環的執行,可是要繼續下一次循環的執行;
public class OutputLettersDemo {
    public static void main(String[] args) {
        //循環輸出26個英文小寫字母,要求分兩行輸出
        //練習break,cotinue
        char ch = 'a';
        int count = 0;//控制換行
        while(ch <= 'z')
        {
            if(ch == 'x')
                break;
            System.out.printf(ch + " ");
            ch ++;
            count ++;

            if (count % 13 == 0)
            {
                System.out.println();
            }
        }

        System.out.println();
        ch = 'a';
        count = 0;
        for(count = 1, ch = 'a';ch <= 'z';ch ++,count ++)
        {
            if(ch == 'x')
                continue;
            System.out.printf(ch + " ");
            if (count % 13 == 0)
            {
                System.out.println();
            }

        }

    }
}

Output:
a b c d e f g h i j k l m 
n o p q r s t u v w 

a b c d e f g h i j k l m 
n o p q r s t u v w y z

從上面的例子能夠看出,break語句直接退出當層循環(到x直接退出,再也不輸出),而continue語句只是結束當前循環,並無退出(只是沒有輸出x)。

相關文章
相關標籤/搜索