04_Java基礎語法_第4天(數組)_講義

今日內容介紹
一、流程控制語句switch
二、數組
三、隨機點名器案例java

01switch語句解構

* A:switch語句解構
    * a:switch只能針對某個表達式的值做出判斷,從而決定程序執行哪一段代碼。

    * b:格式以下:
          swtich(表達式){
              case 常量1 :
                要執行的語句;
              break;
              
              case 常量2 :
                要執行的語句;
              break;
              
              case 常量3 :
                要執行的語句;
              break;
              
              default:
                要執行的語句;
              break;
          }
    * c: 執行流程:  表達式,和case後面的常量進行比較和哪一個case後的常量相同,就執行哪一個case後面的程序,遇到break,就全結束
  
    * d: 關鍵字: switch case default break
    
    * e:舉例
        若是等於1,則輸出星期一
        若是等於2,則輸出星期二
        若是等於3,則輸出星期三
        若是等於4,則輸出星期四
        若是等於5,則輸出星期五
        若是等於6,則輸出星期六
        若是等於7,則輸出星期天

02switch語句的星期判斷

* A: switch語句的星期判斷
    * a: 明確需求
        需求:初始化int類型變量(1-7)表明星期幾,使用switch語句進行判斷,並打印出該整數對應的星期.
                            
    * b: 代碼實現
         public class SwitchDemo01 {
            public static void main(String[] args) {
                int week = 5;
                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;
                }
            }
        }

03switch語句接受的數據類型

* A: switch語句接受的數據類型
    * a:注意事項
        switch語句中的表達式的數據類型,是有要求的
        JDK1.0 - 1.4  數據類型接受 byte short int char
        JDK1.5   數據類型接受 byte short int char enum(枚舉)
        JDK1.7   數據類型接受 byte short int char enum(枚舉), String

04case穿透

* A:case穿透
    * a: 在使用switch語句的過程當中,若是多個case條件後面的執行語句是同樣的,則
    * 該執行語句只需書寫一次便可,這是一種簡寫的方式。
    * b: 例如,要判斷一週中的某一天是否爲工做日,一樣使用數字1~7來表示星期一到星期
    * 天,當輸入的數字爲一、二、三、四、5時就視爲工做日,不然就視爲休息日。

05數組的概述

* A: 數組的概述
    * a:數組的需求
        如今須要統計某公司員工的工資狀況,例如計算平均工資、最高工資等。假設該公司有50名員工,用前面所學的知識完成,
        那麼程序首先須要聲明50個變量來分別記住每位員工的工資,這樣作會顯得很麻煩.

    * b:數組的概述
        數組是指一組數據的集合,數組中的每一個數據被稱做元素。在數組中能夠存聽任意類型的元素
        ,但同一個數組裏存放的元素類型必須一致。

06數組的定義

* A:數組的定義
* b:格式:
         數據類型[] 數組名 = new 數據類型[元素個數或數組長度];

    * c:舉例:
        int[] x = new int[100];
* c:要點說明
    1)數據類型: 數組中存儲元素的數據類型
    2) [] 表示數組的意思
    3) 變量名  自定義標識符  
    4) new  建立容器關鍵字
    5)數據類型: 數組中存儲元素的數據類型
    6)[]  表示數組的意思
    7)元素個數,就是數組中,能夠存儲多少個數據 (恆定, 定長)
      
    數組是一個容器: 存儲到數組中的每一個元素,都有本身的自動編號
    自動編號,最小值是0, 最大值,長度-1
    自動編號專業名次, 索引(index), 下標, 角標
    訪問數組存儲的元素,必須依賴於索引, 公式 數組名[索引]
    
    Java提供一個屬性,操做索引的
    數組的一個屬性,就是數組的長度, 屬性的名字 length
    使用屬性:  數組名.length  數據類型 int
    
    數組的最小索引是0, 最大索引數組.length-1

07JVM內存劃分

* A:內存劃分
* JVM對本身的內存劃分爲5個區域
    * a: 寄存器:內存和CUP之間
    * b: 本地方法棧: JVM調用了系統中的功能
    * c: 方法和數據共享: 運行時期class文件進入的地方
    * d: 方法棧:全部的方法運行的時候進入內存
    * e: 堆:存儲的是容器和對象

08數組的內存

* A: 數組的內存
* int[] x;                  // 聲明一個int[]類型的變量
*   x = new int[100];       // 建立一個長度爲100的數組
*   接下來,經過兩張內存圖來詳細地說明數組在建立過程當中內存的分配狀況。
*   第一行代碼 int[] x; 聲明瞭一個變量x,該變量的類型爲int[],即一個int類型的數組。
*   變量x會佔用一塊內存單元,它沒有被分配初始值
*   第二行代碼 x = new int[100]; 建立了一個數組,將數組的地址賦值給變量x。
*   在程序運行期間可使用變量x來引用數組,這時內存中的狀態會發生變化

09使用索引訪問數組的元素

* A: 使用索引訪問數組的元素
    * 組中有100個元素,初始值都爲0。數組中的每一個元素都有一個索引(也可稱爲角標)
    * ,要想訪問數組中的元素能夠經過「x[0]、x[1]、……、x[98]、x[99]」的形式。
    * 須要注意的是,數組中最小的索引是0,最大的索引是「數組的長度-1」

10數組的length屬性

* A: lenth屬性
    * a 在Java中,爲了方便咱們得到數組的長度,提供了一個length屬性,
    * 在程序中能夠經過「數組名.length」的方式來得到數組的長度,即元素的個數。
    * b 求數組的長度
        public class ArrayDemo01 {
            public static void main(String[] args) {
                int[] arr; // 聲明變量
                arr = new int[3]; // 建立數組對象
                System.out.println("arr[0]=" + arr[0]); // 訪問數組中的第一個元素
                System.out.println("arr[1]=" + arr[1]); // 訪問數組中的第二個元素
                System.out.println("arr[2]=" + arr[2]); // 訪問數組中的第三個元素
                System.out.println("數組的長度是:" + arr.length); // 打印數組長度
            }
        }

11爲數組的元素賦值

* A: 爲數組的元素賦值
    * a: 若是在使用數組時,不想使用這些默認初始值,也能夠顯式地爲這些元素賦值。
    *   賦值過的元素已經變爲新的數值,沒有賦值的元素默認初始化的數值
    * b: 案例
        public class ArrayDemo02 {
            public static void main(String[] args) {
                int[] arr = new int[4]; // 定義能夠存儲4個整數的數組
                arr[0] = 1; // 爲第1個元素賦值1
                arr[1] = 2; // 爲第2個元素賦值2
                // 下面的代碼是打印數組中每一個元素的值
                System.out.println("arr[0]=" + arr[0]);
                System.out.println("arr[1]=" + arr[1]);
                System.out.println("arr[2]=" + arr[2]);
                System.out.println("arr[3]=" + arr[3]);
            }
        }

12數組的定義_2

* A: 定義數組格式2
    * a: 數組初始化
        動態初始化 : 在定義數組時只指定數組的長度,由系統自動爲元素賦初值的方式稱做動態初始化。
        一、類型[] 數組名 = new 類型[長度];
        int[] arr = new int[4];
        靜態初始化: 在初始化數組時還有一種方式叫作靜態初始化,就是在定義數組的同時就爲數組的每一個元素賦值。
        二、類型[] 數組名 = new 類型[]{元素,元素,……};
        int[] arr = new int[]{1,2,3,4};
        三、類型[] 數組名 = {元素,元素,元素,……};  
        int[] arr = { 1, 2, 3, 4 };

13遍歷數組

* A:遍歷數組
    * 在操做數組時,常常須要依次訪問數組中的每一個元素,這種操做稱做數組的遍歷
* B:練習
    public class ArrayDemo04 {
        public static void main(String[] args) {
            int[] arr = { 1, 2, 3, 4, 5 }; // 定義數組
            // 使用for循環遍歷數組的元素
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]); // 經過索引訪問元素
            }
        }
    }
    上述代碼中,定義一個長度爲5的數組arr,數組的角標爲0~4。因爲for循環中定義的變量i的
    值在循環過程當中爲0~4,所以能夠做爲索引,依次去訪問數組中的元素,並將元素的值打印出來

14數組中常見的異常

* A: 數組操做中,常見的兩個異常
     數組的索引越界異常
     空指針異常

* B: 練習
    public class ArrayDemo_4{
        public static void main(String[] args){
            //數組的索引越界異常
            //int[] arr = {5,2,1};
            //數組中3個元素,索引 0,1,2
            //System.out.println(arr[3]);//java.lang.ArrayIndexOutOfBoundsException: 3
            
            //空指針異常
            int[] arr2 = {1,5,8};
            System.out.println(arr2[2]);
            arr2 = null; // arr2 不在保存數組的地址了
            System.out.println(arr2[2]);//java.lang.NullPointerException
        }
    }

15數組最值

* A: 數組獲取最值的原理思想
    * 定義數組的第一個元素arr[0]爲最大值;循環arr數組,判斷若是有比arr[0] 大的就交換
    * ,直到arr數組遍歷完畢,那麼arr[0]中就保存了最大的元素

16數組獲取最值代碼實現

* A: 代碼實現
    public class ArrayDemo05 {
        public static void main(String[] args) {
            int[] arr = { 4, 1, 6, 3, 9, 8 };   // 定義一個數組
            int max = arr[0];                   // 定義變量max用於記住最大數,首先假設第一個元素爲最大值
            // 下面經過一個for循環遍歷數組中的元素
            for (int x = 1; x < arr.length; x++) {
                if (arr[x] > max) {             // 比較 arr[x]的值是否大於max
                    max = arr[x];               // 條件成立,將arr[x]的值賦給max
                }
            }
            System.out.println("max=" + max);   // 打印最大值
        }
    }

17二維數組的定義

* A 二維數組的做用
    * 要統計一個學校各個班級學生的考試成績,又該如何實現呢?
    * 這時就須要用到多維數組,多維數組能夠簡單地理解爲在數組中嵌套數組。
* B 定義格式
    * a 第一種定義格式:
        *  int[][] arr = new int[3][4];
        *  上面的代碼至關於定義了一個3*4的二維數組,即二維數組的長度爲3,二維數組中的每一個元素又是一個長度爲4的數組
    * b 第二種定義格式
        *  int[][] arr = new int[3][];
        *  第二種方式和第一種相似,只是數組中每一個元素的長度不肯定
    * c 第三種定義格式
        *   int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};
        *   二維數組中定義了三個元素,這三個元素都是數組,分別爲{1,2}、{3,4,5,6}、{7,8,9}

18二維數組元素的訪問

* A: 二維數組的訪問
 * 案例:
  class ArrayDemo08 {
    public static void main(String[] args){
    
        //定義二維數組的方式
        int[][] arr = new int[3][4];
        System.out.println( arr );
        System.out.println("二維數組的長度: " + arr.length);
        //獲取二維數組的3個元素
        System.out.println( arr[0] );
        System.out.println( arr[1] );
        System.out.println( arr[2] );
        
        System.out.println("打印第一個一維數組的元素值");
        System.out.println( arr[0][0] );
        System.out.println( arr[0][1] );//訪問的爲二維數組中第1個一維數組的第2個元素
        System.out.println( arr[0][2] );
        System.out.println( arr[0][3] );
        
        System.out.println("打印第二個一維數組的元素值");
        System.out.println( arr[1][0] );
        System.out.println( arr[1][1] );
        System.out.println( arr[1][2] );
        System.out.println( arr[1][3] );
        
        System.out.println("打印第三個一維數組的元素值");
        System.out.println( arr[2][0] );
        System.out.println( arr[2][1] );
        System.out.println( arr[2][2] );
        System.out.println( arr[2][3] );
    }
}

19二維數組內存圖

* A: 二維數組內存圖
 * 舉例:int[][] arr = new int[3][2];
 * 外層數組長在內存開闢連續的3個大的內存空間,每個內存空間都對應的有地址值
 * 每個大內存空間裏又開闢連續的兩個小的內存空間.

20二維數組的定義和訪問

* A: 二維數組的定義和訪問
     * 格式1: 
     *  int[][] arr = new int[3][]; 不推薦
     * 格式2
     *  int[][] arr = {{1,2,4},{4,7},{0,9,3}};
     *  
 * B: 二維數組的訪問
     舉例:int[][] arr = {{1,2,4},{5,8,7},{0,9,3}};  
      想要打印數組中7這個元素須要先找到大的元素索引{5,7} 索引爲2 ,在找7在{5,7}中的索引2
      那麼結果爲 arr[2][2]  第一個[2]表明大數組中{5,8,7}這個元素索引
      第二個[2]表明{5,8,7}中7元素的索引

22二維數組的遍歷

* A:二維數組遍歷
     int[][] arr = {{1,2,4},{4,7},{0,9,3}};
     先使用for循環遍歷arr這個二維數組,獲得每個元素爲arr[i]爲一維數組
     再外層for循環中嵌套一個for循環遍歷每個一維數組arr[i],獲得每一元素

  * B:舉例:遍歷二維數組
    public class ArrayArrayDemo_2{
        public static void main(String[] args){
            int[][] arr = { {1,2,3},{4,5},{6,7,8,9},{0} };
            
            //外循環,遍歷二維數組
            for(int i = 0 ; i < arr.length ;i++){
                //內循環,遍歷每一個一維數組 arr[0] arr[1] arr[i]
                for(int j = 0 ; j < arr[i].length; j++){
                    System.out.print(arr[i][j]);
                }
                System.out.println();
            }
        }
    
  * C:二維數組累加求和
   class ArrayDemo09 {
        public static void main(String[] args){
            int[][] arr2 = { {1,2},{3,4,5},{6,7,8,9,10} };
            int sum2 = 0;
            for (int i=0; i<arr2.length; i++) {
                for (int j=0; j<arr2[i].length; j++) {
                     //System.out.println(arr2[i][j])
                    sum2 += arr2[i][j];
                }
            }
            System.out.println("sum2= "+ sum2);
        }
    }

23二維數組的求和練習

* A 例如要統計一個公司三個銷售小組中每一個小組的總銷售額以及整個公司的銷售額。以下所示
    * 第一小組銷售額爲{11, 12}萬元
    * 第二小組銷售額爲{21, 22, 23}萬元
    * 第三小組銷售額爲{31, 32, 33, 34}萬元。

  * B 代碼實現
    public class ArrayDemo10 {
        public static void main(String[] args) {
            int[][] arr = new int[3][];             // 定義一個長度爲3的二維數組
            arr[0] = new int[] { 11, 12 };          // 爲數組的元素賦值
            arr[1] = new int[] { 21, 22, 23 };
            arr[2] = new int[] { 31, 32, 33, 34 };      
            int sum = 0;                            // 定義變量記錄總銷售額
            for (int i = 0; i < arr.length; i++) { // 遍歷數組元素
                int groupSum = 0; // 定義變量記錄小組銷售總額
            for (int j = 0; j < arr[i].length; j++) { // 遍歷小組內每一個人的銷售額
                    groupSum = groupSum + arr[i][j];
            }
                sum = sum + groupSum;           // 累加小組銷售額
                System.out.println("第" + (i + 1) + "小組銷售額爲:" + groupSum + " 萬元");
            }
            System.out.println("總銷售額爲: " + sum + " 萬元");
        }
    }

24隨機點名器案例分析

* A 隨機點名器案例分析
  
 * B: 需求
     * 隨機點名器,即在全班同窗中隨機的打印出一名同窗名字。
  
 * C:分析:
     * 1)定義數組存數全班同窗
     * 2)生成隨機數範圍0 到 數組長度-1
     * 3)根據這個索引找到數組中的同窗名稱

25隨機點名器代碼實現

* A: 分析
     隨機點名器:
     1  存儲姓名
     2. 預覽全部人的姓名
     3. 隨機出一我的的姓名
 * B 代碼實現
    import java.util.Random;
    public class CallName{
        public static void main(String[] args){
            //存儲姓名,姓名存儲到數組中
            //數組存儲姓名,姓名的數據類型,String
            String[] names = {"張三","李四","王五","李蕾","韓梅梅","小名","老王","小華","約翰遜","愛麗絲"};
            
            //預覽: 遍歷數組,打印全部姓名
            for(int i = 0 ; i < names.length ; i++){
                System.out.println(names[i]);
            }
            System.out.println("=============");
            
            //隨機出一我的的名
            //利用隨機數,生成一個整數,做爲索引,到數組中找到對應的元素
            Random ran = new Random();
            //隨機數,範圍必須是0-數組的最大索引
            int index = ran.nextInt(names.length);//index 就是隨機數,做爲索引
            System.out.println(names[index]);
        }
    }

25隨機點名器代碼實現_2

* A 代碼優化:
    import java.util.Random;
    public class CallName{
        public static void main(String[] args){
            String[] names = {"張三","李四","王五","李蕾","韓梅梅","小名","老王","小華","約翰遜","愛麗絲"};
            System.out.println(names[new Random().nextInt(names.length)]);
        }
    }
相關文章
相關標籤/搜索