【Java基礎】Eclipse 和陣列
阿新 • • 發佈:2020-12-13
Eclipse 和陣列
Eclipse 安裝和使用
...
陣列的概述
陣列(Array):是多個相同型別資料按一定順序排列的集合,並使用一個名字命名,並通過編號的方式對這些資料進行統一管理。
陣列相關的概念:
- 陣列名;
- 元素;
- 下標或索引;
- 陣列的長度。
陣列的特點:
- 陣列是有序排列的;
- 陣列屬於引用資料型別的變數,但是陣列的元素可以是任何陣列型別;
- 建立陣列物件會在記憶體中開闢一整塊連續的空間;
- 陣列的長度一旦確定,就不能修改。
陣列的分類:
- 按維數:一維、二維、...;
- 按型別:基本資料型別的陣列、引用資料型別的陣列。
一維陣列的使用
宣告:
- 宣告方式:
type var[];
type[] var;
; - 宣告陣列時不能指定其長度,例如
int a[5];
就非法。
初始化:
-
動態初始化:陣列宣告且為陣列元素分配空間 與 賦值的操作 分開進行;
String[] names = new String[5]; names[0] = "A1"; names[1] = "A2"; names[2] = "A3";
-
靜態初始化:陣列宣告且為陣列元素分配空間 與 賦值的操作 同時進行;
String[] names = {"AA", "BB", "CC"}; // 或者 String[] names = new String[]{"AA", "BB", "CC"};
陣列元素的引用:
- 定義並用運算子 new 為之分配空間後,才可以引用陣列中的每個元素;
- 陣列元素的引用方式:
陣列名[陣列元素下標]
; - 每個陣列都有一個屬性 length 指明它的長度,陣列一旦初始化,其長度是不可變的。
陣列元素的預設初始值:
-
因為陣列是引用型別,它的元素相當於類的成員變數,因此陣列一經分配空間,其中的每個也被按照成員變數同樣的方式被隱式初始化;
public class Test{ public static void main(String[] args) { int[] a= new int[5]; for (int i = 0; i < a.length; ++i) { System.out.println(a[i]); // 0 0 0 0 0 } } }
-
對於基本資料型別而言,byte、short、int、long、float、double、char 均為 0,boolean 為 false;
-
對於引用資料型別而言,預設初始化值為 null。
一維陣列的記憶體解析
記憶體的典型結構:
- 棧(stack):區域性變數;
- 堆(heap):new 出來的結構;
- 方法區:
- 常量池;
- 靜態域。
package com.parzulpan.java.ch03;
import java.util.Scanner;
/**
* @Author : parzulpan
* @Time : 2020-11-17
* @Desc : 從鍵盤讀入學生成績,找出最高分,並輸出學生成績等級。
* 成績>=最高分-10 等級為’A’
* 成績>=最高分-20 等級為’B’
* 成績>=最高分-30 等級為’C’
* 其餘 等級為’D’
*/
public class ArrayTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入學生人數:");
int studentNumber = scanner.nextInt();
int[] studentScores = new int[studentNumber];
int maxScore = 0;
int temp;
System.out.println("請輸入 " + studentNumber + " 個成績:");
for (int i = 0; i < studentScores.length; ++i) {
temp = scanner.nextInt();
studentScores[i] = temp;
if (maxScore < temp) {
maxScore = temp;
}
}
System.out.println("最高分是:" + maxScore);
char level;
for (int i = 0; i < studentScores.length; ++i) {
if (maxScore - 10 <= studentScores[i]) {
level = 'A';
} else if (maxScore - 20 <= studentScores[i]) {
level = 'B';
} else if (maxScore - 30 <= studentScores[i]) {
level = 'C';
} else {
level = 'D';
}
System.out.println("student " + i + " , score is " + studentScores[i] + " , grade is " + level);
}
}
}
二維陣列的使用
多維陣列:
- Java 語言裡提供了支援多維陣列的語法;
- 可以把一維陣列當成幾何中的線性圖形,那麼二維陣列就相當於是一個表格;
- 可以看成是一維陣列 array1 又作為另一個一維陣列 array2 的元素而存在。其實,從陣列底層的執行機制來看,其實沒有多維陣列。
初始化:
-
動態初始化:
int[][] arr = new int[3][2]; // 二維陣列中有 3 個一維陣列,每一個一維陣列中有 2 個元素 int[][] arr = new int[3][]; // 二維陣列中有 3 個一維陣列,每一個一維陣列都是預設初始值 null
-
靜態初始化:
int[][] arr = new int[][]{{3,8,2},{2,7},{9,0,1,6}}; // 或者 int[][] arr = {{3,8,2},{2,7},{9,0,1,6}}; // 型別推斷
-
特殊的,
int[] x, y[];
x 是一維陣列,y 是二維陣列; -
Java 中多維陣列不必都是規則矩陣形式。
陣列元素的預設初始值:
-
看程式得結論:
public class Test { public static void main(String[] args) { int[][] arr = new int[4][3]; System.out.println(arr); // 地址:[[I@2ff4f00f System.out.println(arr[0]); // 地址:[I@2ff4f00f System.out.println(arr[0][0]); // 0 String[][] arr2 = new String[4][2]; System.out.println(arr2); // 地址:[[Ljava.lang.String;@3f0ee7cb System.out.println(arr2[0]); // 地址:[Ljava.lang.String;@75bd9247 System.out.println(arr2[0][0]); // null String[][] arr3 = new String[4][]; System.out.println(arr3); // 地址:[[Ljava.lang.String;@7d417077 System.out.println(arr3[0]); // null System.out.println(arr3[0][0]); // Error } }
二維陣列的記憶體解析
...
練習和總結
建立一個長度為 6 的 int 型陣列,要求陣列元素的值都在 1-30 之間,且是隨機賦值。同時,要求元素的值各不相同。
package com.parzulpan.java.ch03;
/**
* @Author : parzulpan
* @Time : 2020-11-17
* @Desc : 建立一個長度為 6 的 int 型陣列,要求陣列元素的值都在 1-30 之間,且是隨機賦值。同時,要求元素的值各不相同。
*/
public class genArray {
public static void main(String[] args) {
int[] arr = new int[6];
for (int i = 0; i < arr.length; ++i) {
arr[i] = (int)(Math.random() * 30) + 1;
for (int j = 0; j < i; ++j) {
if (arr[i] == arr[j]) {
--i;
break;
}
}
}
for (int value : arr) {
System.out.println(value);
}
}
}