今日內容
- 數組介紹及動態初始化
- 數組內存結構及靜態初始化
- 數組常見問題及練習
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階段補充