Java 第四天(純乾貨)(帶你14天瞭解並掌握Java SE)

今日內容

  • 數組介紹及動態初始化
  • 數組內存結構及靜態初始化
  • 數組常見問題及練習

01. 數組的概述和定義格式

  • 什麼是數組?
  • 該如何定義數組?
總結:
    1: 數組就是一個【容器】,用來存儲【同種數據類型】的多個值
    2: 數據類型[] 數組名;

        double[] dArr;      // 這是定義了一個double類型的數組,數組名叫dArr

02. 數組初始化之動態初始化

  • 數組有幾種初始化方式?
  • 如何實現動態初始化?
總結:
    1: 
        動態初始化: 手動指定長度,由系統給出默認初始化值
        靜態初始化

    2:  
        數據類型[] 數組名 = new 數據類型[數組的長度];

        打印數組變量:
         *  
         *      [I@26a2bd15
         * 
         *      @ :分隔符
         *      [ :標識當前的數據是一個數組類型,幾個空括號代表的是幾維數組
         *      I :代表當前數組是一個int類型數組
         *      26a2bd15 : 十六進制[地址值]

問題: 描述下列代碼的每一步代表什麼
      char[] arr = new char[2];

        char[] arr : 定義了數組類型變量, char類型數組,數組名叫arr

        new char[2]; : 初始化了一個char類型數組,數組的長度爲2

03. 數組操作之獲取數組中的元素

  • 什麼是索引?
  • 怎樣通過索引操作數組中的元素?
總結:
    1. 索引就是數組中,每一個元素的編號,編號從0開始,最大編號是數組的長度-1

        索引, 下標, 角標

    2. 數組名[索引]
  • 練習:
(5分鐘)
定義一個長度爲6的數組
並給數組中每個元素賦值2,4,6,8,10,12
取出數組中所有的元素並打印

04. Java中的內存分配圖解

  • Java內存中分爲那幾塊區域?
  • 數組在內存中創建的過程?
總結:
    1. 
        1. 桟內存 : 方法運行時,所進入的內存   -> 存放的一般都是變量
        2. 堆內存:new出來的東西都進入堆內存    -> 內部的數據都會產生地址值
        3. 方法區:.class文件加載的地方
        ------------------
        4. 本地方法區 : 調用了操作系統底層資源
        5. 寄存器:交給CPU去使用的            

    2. 再畫一張
  • 數據的默認初始化值爲?
總結:

    整數:         0
    小數:         0.0
    布爾:         false
    字符:         \u0000
    引用數據類型:     null

05. 一個數組的內存圖

  • 案例演示: 創建數組存儲元素.
  • 看圖說話 (要求自己會畫)

06. 兩個數組的內存圖

  • 案例演示: 定義兩個數組,分別輸出數組名及元素。然後分別給數組中的元素賦值,分別再次輸出數組名及元素
  • 看圖說話 (看懂即可)

07. 兩個數組指向同一個地址的內存圖

  • 案例演示:
    • 定義兩個數組,先定義一個數組,賦值,輸出。
    • 然後定義第二個數組的時候把第一個數組的地址賦值給第二個數組。
    • 然後給第二個數組賦值,再次輸出兩個數組的名及元素。
  • 看圖說話 (看懂即可)

08. 數組初始化之靜態初始化

  • 數組的靜態初始化格式爲?
  • 兩種初始化有什麼區別?
總結:
    1. 完整格式:
         數據類型[] 數組名 = new數據類型[]{元素1,元素2,元素3...};
       簡化格式:
         數據類型[] 數組名 = {元素1,元素2,元素3...};
    2. 動態初始化和靜態初始化的區別:

            動態: 手動給定長度,由系統給出默認初始化值
                        int[] arr = new int[3];

            靜態: 手動給出元素,由系統計算出數組的長度

                        int[] arr = {11,22,33};

應用:
    什麼時候用動態初始化?
        如果要完成的需求,只明確了數據的數量,但是不明確具體的數值,就使用動態初始化
            舉例:鍵盤錄入5個數據,存儲到數組中並求和

    什麼時候用靜態初始化?
        如果要操作的數據都是現有的,就使用靜態初始化
            舉例:將數據2,4,6,8,10存儲到數組中並求和

09. 數組操作的兩個常見小問題

  • 常見的問題有哪些? 又是怎樣引發的?
總結:
    1: ArrayIndexOutOfBoundsException : 數組索引越界異常

            原因:當訪問了不存在的索引

    2: NullPointerException : 空指針異常

            原因:當引用數據類型的變量不再記錄地址值,而還想使用變量去訪問堆內存的數據,就會拋出此異常

10. 數組操作之遍歷數組

  • 什麼是數組的遍歷?
  • 數組名.length代表的是什麼?
總結:
    1. 將數組中的每一個元素,取出來
    2. 數組的長度
  • 轉ppt兩個練習

11. 數組操作之獲取最值

  • 分析需求, 案例演示

12. 數組練習之評委打分

  • 需求:

    • 在編程競賽中,有6個評委爲參賽的選手打分,分數爲0-100的整數分。
    • 選手的最後得分爲:去掉一個最高分和一個最低分後 的4個評委平均值。
    • 請寫代碼實現。(不考慮小數部分)
  • 分析:

    • A:定義一個長度爲6的數組
    • B:鍵盤錄入評委的分數
    • C:獲取最高分,最低分
    • D:求評委的分數和
    • E:平均分:(和-最高分-最低分)/(arr.length-2)
    • F:輸出平均分即可

13. 數組練習之不死神兔(斐波那切數列)

  • 需求:
    • 有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子
    • 假如兔子都不死,問第二十個月的兔子對數爲多少?
* 1 1 2 3 5 8 13 21 ...

    int[] arr = new int[8];

    arr[0] = 1;
    arr[1] = 1;

    for(int i = 2; i < arr.length; i++){
        arr[i] = arr[i-2] + arr[i-1];
    }

    System.out.println(arr[arr.length-1]);
  • 如果求的月份過多, 會產生什麼樣的問題?
    • BigInteger解決.
    • TODO:// Api階段補充
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章