程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 【原】Java學習筆記010 - 數組

【原】Java學習筆記010 - 數組

編輯:關於JAVA

【原】Java學習筆記010 - 數組。本站提示廣大學習愛好者:(【原】Java學習筆記010 - 數組)文章只能為提供參考,不一定能成為您想要的結果。以下是【原】Java學習筆記010 - 數組正文


 1 package cn.temptation;
 2 
 3 public class Sample01 {
 4     public static void main(String[] args) {
 5         // 需求:一堆分數,要統計最高分、最低分、總分、平均分
 6 //        int score1 = 80;
 7 //        int score2 = 70;
 8 //        int score3 = 90;
 9 //        int score4 = 65;
10 //        // ...
11 //        // 以計算平均分為例
12 //        double average = ((double)(score1 + score2 + score3 + score4)) / 4;
13 //        System.out.println("平均分為:" + average);
14         
15         // 問題:相同意義的變量定義了一大堆,覺得這樣一點都不簡潔
16         
17         // 思考解決方案:運用抽象的思維,類比生活中使用的冰格,作為一個制作冰塊的容器,其內部每一個格子中的冰塊可以單獨使用的,兼具了批量性 和 獨立性
18         //                那麼考慮制作一個存放分數的容器,且在這個分數容器中的每一個分數也可以單獨使用
19         
20         // 數組:Array,存儲同一數據類型的多個元素的容器
21         
22         // 注意:【數組是引用數據類型(引用類型),基本數據類型是值類型】
23         // 內存:根據處理的內容的不同,分為 堆棧(棧:stack)   和  堆(Heap)
24         // 值類型:存儲在棧中
25         // 引用數據類型:聲明存儲在棧中,內容存儲在堆中
26         
27         // 數組的格式:
28         // 形式1:數據類型[]   數組名(硬性要求:大家使用這種形式):聲明了一個xxx數據類型的數組,名字叫yyy
29         // 形式2:數據類型      數組名[]:聲明了一個xxx數據類型,名字叫yyy的數組
30         
31         // 聲明一個成績數組
32 //        int[] scoreArr;
33 //        int scoreArr[];        // 語法OK,但是不建議這樣寫
34         
35         // 數組變量使用前必須進行初始化操作
36         // 語法錯誤:The local variable scoreArr may not have been initialized
37 //        System.out.println(scoreArr);
38         
39         // 數組初始化形式:
40         // 1、動態初始化:由使用者設置數組的長度,再填充元素
41         // 2、靜態初始化:由使用者填充元素,由JDK計算數組的長度
42         
43         // 動態初始化的格式:new 數據類型[數組的長度];
44         // A:new 關鍵字用來在內存的堆(Heap)中開辟一塊空間
45         // B:數組的長度由使用者設置
46         // C:數組的下標(索引)用來表示數組中元素的位置,下標(索引)從0開始,到數組的長度-1結束
47         
48         // 對於已經聲明過的數組變量,進行動態初始化並賦值
49 //        scoreArr = new int[3];
50         
51         // 數組的初始化:可以把數組的聲明 和 初始化 放在一行語句中執行
52         int[] scoreArr = new int[3];
53         
54         // 下句輸出  [I@15db9742 ,表示了scoreArr數組變量在內存中的類型  和  地址(以@符號作為分隔,前面是類型,後面是地址)
55         System.out.println(scoreArr);        // [I@15db9742
56     }
57 }
 1 package cn.temptation;
 2 
 3 public class Sample02 {
 4     public static void main(String[] args) {
 5         // 數組的下標(索引)是從0開始的
 6         // 數組的長度就是描述數組中元素的個數
 7 //        int[] arr = new int[3];
 8 //        arr[0] = 90;        // 對數組中的第一個元素賦值為90
 9 
10         // 創建int類型的數組,向其中存放其他數據類型的元素,會發生什麼現象?
11         // 向int類型的元素存放boolean類型的內容,語法出錯
12         // 產生語法錯誤:Type mismatch: cannot convert from boolean to int
13 //        arr[1] = true;        // 對數組中的第二個元素賦值為true
14         
15         // 向int類型的元素存放long類型的內容,語法出錯
16         // 產生語法錯誤:Type mismatch: cannot convert from long to int
17 //        arr[1] = 12345678901L;
18         
19         // 向int類型的元素存放byte類型的內容,語法OK
20 //        arr[1] = (byte)126;
21         
22         // 向int類型的元素存放short類型的內容,語法OK
23 //        arr[1] = (short)130;
24         
25         // 【數組在內存中的存儲形式】
26         // 賦值號左邊的是數組的聲明,類比名片
27         // 賦值號右邊的是數組的內容,類比具體的家的位置
28         // 通過名片找到具體的家的位置
29         // 通過棧上聲明的變量找到堆中具體存放內容的位置來使用數組
30         
31 //        System.out.println(arr);            // [I@15db9742
32         
33         // 數組中元素的默認值
34         // byte、short、int、long類型的數組的元素默認值為0
35 //        int[] arr1 = new int[3];
36 //        System.out.println(arr1[0]);        // 0
37 //        System.out.println(arr1[1]);        // 0
38 //        System.out.println(arr1[2]);        // 0
39         
40 //        byte[] arr2 = new byte[3];
41 //        System.out.println(arr2[0]);        // 0
42 //        System.out.println(arr2[1]);        // 0
43 //        System.out.println(arr2[2]);        // 0
44 //        
45 //        short[] arr3 = new short[3];
46 //        System.out.println(arr3[0]);        // 0
47 //        System.out.println(arr3[1]);        // 0
48 //        System.out.println(arr3[2]);        // 0
49 //        
50 //        long[] arr4 = new long[3];
51 //        System.out.println(arr4[0]);        // 0
52 //        System.out.println(arr4[1]);        // 0
53 //        System.out.println(arr4[2]);        // 0
54         
55         // double、float類型的數組的元素默認值為0.0
56 //        double[] arr5 = new double[3];
57 //        System.out.println(arr5[0]);        // 0.0
58 //        System.out.println(arr5[1]);        // 0.0
59 //        System.out.println(arr5[2]);        // 0.0
60 //        
61 //        float[] arr6 = new float[3];
62 //        System.out.println(arr6[0]);        // 0.0
63 //        System.out.println(arr6[1]);        // 0.0
64 //        System.out.println(arr6[2]);        // 0.0
65         
66         // char類型的數組的元素默認值為'\u0000'
67 //        char[] arr7 = new char[3];
68 //        System.out.println(arr7[0]);        // '\u0000'
69 //        System.out.println(arr7[1]);        // '\u0000'
70 //        System.out.println(arr7[2]);        // '\u0000'
71         
72         // boolean類型的數組的元素默認值為false
73         boolean[] arr8 = new boolean[3];
74         System.out.println(arr8[0]);        // false
75         System.out.println(arr8[1]);        // false
76         System.out.println(arr8[2]);        // false
77     }
78 }
 1 package cn.temptation;
 2 
 3 public class Sample03 {
 4     public static void main(String[] args) {
 5         int[] scoreArr = new int[3];
 6         
 7         System.out.println(scoreArr);        // [I@15db9742
 8         System.out.println(scoreArr[0]);    // 0
 9         System.out.println(scoreArr[1]);    // 0
10         System.out.println(scoreArr[2]);    // 0
11         
12         System.out.println("-------------------------------------");
13         
14         // 對數組中的部分元素進行賦值
15         scoreArr[0] = 80;
16         scoreArr[2] = 55;
17         
18         // 1、數組的元素的值發生變化後,數組的地址沒有變化
19         // 2、數組的元素的值發生變化後,數組中沒有發生變化的元素的值還是之前的值
20         System.out.println(scoreArr);        // [I@15db9742
21         System.out.println(scoreArr[0]);    // 80
22         System.out.println(scoreArr[1]);    // 0
23         System.out.println(scoreArr[2]);    // 55
24     }
25 }
 1 package cn.temptation;
 2 
 3 public class Sample04 {
 4     public static void main(String[] args) {
 5         // 需求:把數組中的元素的值都顯示出來
 6         int[] scoreArr = new int[3];
 7         
 8         // 下面的寫法可以實現需求,但是使用起來很不方便
 9 //        System.out.println(scoreArr[0]);
10 //        System.out.println(scoreArr[1]);
11 //        System.out.println(scoreArr[2]);
12         
13         // 看到有重復的操作,就想到了循環
14 //        for (int i = 0; i < 3; i++) {
15 //            System.out.println(scoreArr[i]);
16 //        }
17         
18         // 上面的寫法不具備通用性,因為這裡的數字3是硬編碼,其實它應該表示為數組的長度(數組中元素的個數)
19         
20         // 通過使用    數組名.length 可以獲取到數組的長度
21 //        System.out.println("數組的長度為:" + scoreArr.length);
22         
23         // 下面的寫法就具備通用性(注意:eclipse中提供的for語句塊結構:iterate over array,即在數組上進行迭代)
24 //        for (int i = 0; i < scoreArr.length; i++) {
25 //            System.out.println(scoreArr[i]);
26 //        }
27         
28         // 還有更加簡單的寫法,使用增強型for循環-----> foreach
29         // 增強型for循環的格式:for(數據類型   遍歷變量名(迭代變量名)   :   被遍歷變量名(被迭代變量名)) { ... }
30 //        for (int i : scoreArr) {
31 //            System.out.println(i);
32 //        }
33         
34         // 注意:遍歷變量名(迭代變量名)可以由使用者自己定義名稱
35 //        for (int item : scoreArr) {
36 //            System.out.println(item);
37 //        }
38         
39         // 產生錯誤:Type mismatch: cannot convert from element type int to byte
40 //        for (byte i : scoreArr) {
41 //            System.out.println(i);
42 //        }
43         
44         // 產生錯誤:Type mismatch: cannot convert from element type int to short
45 //        for (short i : scoreArr) {
46 //            System.out.println(i);
47 //        }
48         
49         // 語法OK
50 //        for (long i : scoreArr) {
51 //            System.out.println(i);
52 //        }
53         
54         // 總結:被遍歷的變量名的數據類型,認為其內部的元素也是該數據類型的,那麼用范圍比它大的數據類型接收時是可以的
55         //        用范圍比它小的數據類型接收時就會抱語法錯誤
56         
57         // 需求:使用循環和數組長度等技術點,制作一個方法printArray,用來打印數組中的元素,要求顯示為[元素1的值, 元素2的值, ... 元素n的值]
58         printArray(scoreArr);
59     }
60     
61     /**
62      * 打印數組方法
63      * @param arr:int類型的數組
64      */
65     public static void printArray(int[] arr) {
66         // 最左邊先打印出一個"["
67         System.out.print("[");
68         
69         // 遍歷數組
70         for (int i = 0; i < arr.length; i++) {
71             if (i == arr.length - 1) {        // 數組中的最後一個元素,加上"]"
72                 System.out.print(arr[i] + "]");
73             } else {                        // 數組中的其他元素,加上","
74                 System.out.print(arr[i] + ",");
75             }
76         }
77         
78         // 換行
79         System.out.println();
80     }
81 }
 1 package cn.temptation;
 2 
 3 public class Sample05 {
 4     public static void main(String[] args) {
 5         int[] arr = new int[3];
 6         arr[0] = 10;
 7         arr[1] = 21;
 8         arr[2] = 30;
 9         
10         // 需求:制作一個方法getMaxItem,獲取數組中的最大元素值
11         int maxItem = getMaxItem(arr);
12         System.out.println("數組中最大的元素為:" + maxItem);
13         
14         // 需求:制作一個方法getMinItem,獲取數組中的最小元素值
15         int minItem = getMinItem(arr);
16         System.out.println("數組中最小的元素為:" + minItem);
17         
18         // 需求:制作一個方法getTotal,獲取數組中的元素的總和
19         int total = getTotal(arr);
20         System.out.println("數組中元素的總和為:" + total);
21         
22         // 需求:制作一個方法getAverage,獲取數組中的元素的平均值
23         double average = getAverage(arr);
24         System.out.println("數組中元素的平均值為:" + average);
25     }
26     
27     /**
28      * 獲取數組中的最大元素值
29      * @param arr:數組
30      * @return:最大的元素值
31      * 
32      * 思路:使用窮舉思路
33      * 1、先設置一個作為比較的標桿,從數組中拿出一個元素認為它是最大的
34      * 2、把數組中的其他元素與之進行比較
35      * 3、如果有其他的元素比作為標桿的元素大,則替換之
36      * 4、比較完成後,就可以得到數組中的最大元素
37      */
38     public static int getMaxItem(int[] arr) {
39         int tempMax = arr[0];
40         
41         // 遍歷數組
42         for (int i = 0; i < arr.length; i++) {
43             if (arr[i] > tempMax) {
44                 tempMax = arr[i];
45             }
46         }
47         
48         return tempMax;
49     }
50     
51     /**
52      * 獲取數組中的最小元素值
53      * @param arr:數組
54      * @return:最小的元素值
55      */
56     public static int getMinItem(int[] arr) {
57         int tempMin = arr[0];
58         
59         // 遍歷數組
60         for (int i = 0; i < arr.length; i++) {
61             if (arr[i] < tempMin) {
62                 tempMin = arr[i];
63             }
64         }
65         
66         return tempMin;
67     }
68     
69     /**
70      * 獲取數組中的元素值的總和
71      * @param arr:數組
72      * @return:數組中元素的總和
73      */
74     public static int getTotal(int[] arr) {
75         int total = 0;
76         
77         // 遍歷數組
78         for (int i = 0; i < arr.length; i++) {
79             total += arr[i];
80         }
81         
82         return total;
83     }
84     
85     /**
86      * 獲取數組中的元素值的平均值
87      * @param arr:數組
88      * @return:數組中元素的平均值
89      */
90     public static double getAverage(int[] arr) {
91         double total = 0.0;
92         
93         for (int i = 0; i < arr.length; i++) {
94             total += arr[i];
95         }
96         
97         return total / arr.length;
98     }
99 }
 1 package cn.temptation;
 2 
 3 public class Sample06 {
 4     public static void main(String[] args) {
 5         int[] arr1 = new int[3];
 6         arr1[0] = 80;
 7         arr1[2] = 55;
 8         
 9         int[] arr2 = new int[3];
10         arr2[0] = 80;
11         arr2[2] = 55;
12         
13         System.out.println("數組1的地址:" + arr1);        // [I@15db9742
14         printArray(arr1);
15         
16         System.out.println("數組2的地址:" + arr2);        // [I@6d06d69c
17         printArray(arr2);
18         
19         System.out.println("----- 修改元素值 -----");
20         
21         arr2[0] = 38;
22         arr2[1] = 100;
23         
24         System.out.println("數組1的地址:" + arr1);        // [I@15db9742
25         printArray(arr1);
26         
27         System.out.println("數組2的地址:" + arr2);        // [I@6d06d69c
28         printArray(arr2);
29         
30         // 不同的數組,元素的值相同,修改後,對其他數組中的元素的值無影響
31         // 因為不同的數組中的元素存放在內存的堆中不同的空間裡
32         
33         // 從運行的結果得知:
34         // 【只要使用了new關鍵字,就在內存的堆中開辟了新的空間】
35     }
36     
37     /**
38      * 打印數組方法
39      * @param arr:int類型的數組
40      */
41     public static void printArray(int[] arr) {
42         // 最左邊先打印出一個"["
43         System.out.print("[");
44         
45         // 遍歷數組
46         for (int i = 0; i < arr.length; i++) {
47             if (i == arr.length - 1) {        // 數組中的最後一個元素,加上"]"
48                 System.out.print(arr[i] + "]");
49             } else {                        // 數組中的其他元素,加上","
50                 System.out.print(arr[i] + ",");
51             }
52         }
53         
54         // 換行
55         System.out.println();
56     }
57 }
 1 package cn.temptation;
 2 
 3 public class Sample07 {
 4     public static void main(String[] args) {
 5         int[] arr1 = new int[3];
 6         arr1[0] = 80;
 7         arr1[2] = 55;
 8         
 9         // 注意:下句語句體現了引用數據類型的特點
10         int[] arr2 = arr1;
11         
12         System.out.println("數組1的地址:" + arr1);        // [I@15db9742
13         printArray(arr1);
14         
15         System.out.println("數組2的地址:" + arr2);        // [I@15db9742
16         printArray(arr2);
17         
18         System.out.println("----- 修改元素值 -----");
19         
20         arr2[0] = 38;
21         arr2[1] = 100;
22         
23         System.out.println("數組1的地址:" + arr1);        // [I@15db9742
24         printArray(arr1);
25         
26         System.out.println("數組2的地址:" + arr2);        // [I@15db9742
27         printArray(arr2);
28         
29         // 從運行的結果得知:
30         // 1、只要使用了new關鍵字,就在內存的堆中開辟了新的空間
31         // 2、引用數據類型在做值傳遞時,傳遞的是引用
32     }
33     
34     /**
35      * 打印數組方法
36      * @param arr:int類型的數組
37      */
38     public static void printArray(int[] arr) {
39         // 最左邊先打印出一個"["
40         System.out.print("[");
41         
42         // 遍歷數組
43         for (int i = 0; i < arr.length; i++) {
44             if (i == arr.length - 1) {        // 數組中的最後一個元素,加上"]"
45                 System.out.print(arr[i] + "]");
46             } else {                        // 數組中的其他元素,加上","
47                 System.out.print(arr[i] + ",");
48             }
49         }
50         
51         // 換行
52         System.out.println();
53     }
54 }
 1 package cn.temptation;
 2 
 3 public class Sample08 {
 4     public static void main(String[] args) {
 5         // 值類型的特點
 6         
 7 //        int i = 2;
 8 //        int j = 2;
 9 //        
10 //        System.out.println("i的值為:" + i);
11 //        System.out.println("j的值為:" + j);
12 //        
13 //        System.out.println("----- 修改元素值 -----");
14 //        
15 //        j = 3;
16 //        
17 //        System.out.println("i的值為:" + i);
18 //        System.out.println("j的值為:" + j);
19         
20         int i = 2;
21         int j = i;
22         
23         System.out.println("i的值為:" + i);
24         System.out.println("j的值為:" + j);
25         
26         System.out.println("----- 修改元素值 -----");
27         
28         j = 3;
29         
30         System.out.println("i的值為:" + i);
31         System.out.println("j的值為:" + j);
32         
33         // 值類型的特點
34         // 存儲在棧上,沒有棧和堆之間的指向引用,變化只影響自身
35     }
36 }
 1 package cn.temptation;
 2 
 3 public class Sample09 {
 4     public static void main(String[] args) {
 5         // 數組初始化
 6         // 靜態初始化:由使用者填充數組的元素,由JDK自動判定數組的長度
 7         
 8         // 靜態初始化的格式:
 9         // 1、簡寫形式:{ 元素1, 元素2, ... 元素n}
10         // 2、完整形式:new 數據類型[] { 元素1, 元素2, ... 元素n}
11         
12         // 簡寫形式
13         int[] arr1 = { 10, 20, 30 };
14         System.out.println("數組的長度為:" + arr1.length);
15         
16         // 完整形式
17         int[] arr2 = new int[] { 10, 20, 30 };
18         System.out.println("數組的長度為:" + arr2.length);
19         
20         // 遍歷數組中的元素
21         // 方式1:一般for循環
22         for (int i = 0; i < arr1.length; i++) {
23             System.out.println(arr1[i]);
24         }
25         
26         // 方式2:增強型for循環
27         for (int item : arr2) {
28             System.out.println(item);
29         }
30         
31         // 注意:
32         // 1、靜態初始化的簡寫形式看起來沒有new,但是實際上還是做了new的操作,還是在內存的堆上開辟了空間
33         // 2、數組的初始化有兩種形式,使用時只能選擇一種形式使用,不能混搭
34         
35         // 混搭動態初始化和靜態初始化會產生語法錯誤
36         // 產生語法錯誤:Cannot define dimension expressions when an array initializer is provided
37 //        int[] arr3 = new int[3] { 10, 20, 30 };
38     }
39 }
 1 package cn.temptation;
 2 
 3 public class Sample10 {
 4     public static void main(String[] args) {
 5         // 1、下面語句是否在內存的堆中開辟了空間?        答:new出了空間,地址為15db9742
 6         // 2、下面這個數組長度是多少?                    答:數組長度為0
 7         // 3、如何為這個數組填充元素並給元素賦值?
 8         int[] arr = {};
 9         
10         System.out.println(arr);            // [I@15db9742
11         System.out.println("數組的長度為:" + arr.length);        // 0
12         
13         // 遍歷數組
14         for (int i = 0; i < arr.length; i++) {
15             System.out.println(arr[i]);
16         }
17         
18         for (int item : arr) {
19             System.out.println(item);
20         }
21         
22         // 下句執行時會產生異常:java.lang.ArrayIndexOutOfBoundsException: 0,數組索引越界異常
23         // 因為當前arr數組中一個元素都沒有,而下句語句要給第一個元素進行賦值,自然出現數組索引越界異常
24 //        arr[0] = 10;
25         // 下句執行時會產生異常:java.lang.ArrayIndexOutOfBoundsException: 10,數組索引越界異常
26 //        arr[10] = 99;
27         // 由上面的語句得知java.lang.ArrayIndexOutOfBoundsException後的數字指的是越界元素對應的索引
28         
29         // 考慮1、考慮設置數組arr的length屬性
30         // 語法錯誤:The final field array.length cannot be assigned
31         // 數組的length屬性可以被讀取,但是不可以被修改
32 //        arr.length = 3;
33         
34         // 考慮2、張冠李戴
35         // 通過創建一個新的數組,在堆中開辟一塊新的空間,然後把指向之前開辟出的空間的引用(arr的棧堆之間的引用)改為指向新開辟的空間的引用
36         int[] arrExtend = { 10, 20, 30 };
37         arr = arrExtend;
38         
39         // 遍歷數組
40         for (int i = 0; i < arr.length; i++) {
41             System.out.println(arr[i]);
42         }
43         
44         for (int item : arr) {
45             System.out.println(item);
46         }
47     }
48 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved