java循環結構、數組
數組
數組是是多個相同類型數據按一定順序排列的集合,並使用一個名字命名,並通過編號的方式對這些數據進行統一管理。
- 數組本身是引用數據類型,既可以存儲基本數據類型,也可以存儲引用數據類型。它的元素相當於類的成員變數。
-
創建數組對象會在記憶體中開闢一整塊連續的空間,而數組名中引用的是這塊連續空間的首地址。
- 數組的長度一旦確定,就不能修改。
- 通過下標(或索引)的方式調用指定位置的元素。
- 數組的分類:
按照維度:一維數組、二維數組、三維數組、…按照元素的數據類型分:基本數據類型元素的數組、引用數據類型元素的數組(即對象數組)
從六方面理解數組:
- 一維(二維)數組的聲明和初始化
- 如何調用數組指定位置的元素
- 如何獲取數組的長度
- 如何遍曆數組
- 數組元素的默認初始化值
- 數組的記憶體解析
一維數組的使用
格式:type var[] 或 type[] var
1 //靜態初始化:數組的初始化與數組元素的賦值同時進行 2 int[] num = new int[]{1,2,3,4,5}; 3 //動態初始化:數組的初始化與數組元素的賦值分開進行 4 String[] names = new String[5]; 5 name[0] = "11";
**數組一旦初始化完成,數組的長度就確定了。
每個數組都有一個屬性length指明它的長度,例如數組a: a.length指明數組a的長度(元素個數)
數組的默認初始化值
對於基本數據類型:默認初始化值各有不同
對於引用數據類型:默認初始化值為null(注意:於0不同)
/*從鍵盤讀入學生成績,找出最高分, 並輸出學生成績等級。 成績>=最高分-10 等級為』A』 成績>=最高分-20 等級為』B』 成績>=最高分-30 等級為』C』 其餘 等級為』D』 提示:先讀入學生人數,根據人數創建int數組, 存放學生成績。*/ import java.util.Scanner;//在最上面 public class ArrayTest1 { public static void main(String[] args) { //調用Scanner輸入學生的成績 Scanner scan = new Scanner(System.in); System.out.println("請輸入學生的人數:"); int number = scan.nextInt(); //創建數組,存儲學生的成績。動態初始化 int[] score = new int[number]; int maxscore = 0; //將學生的成績賦值給數組 System.out.println("請輸入"+ number +"個學生成績"); for(int i=0 ; i<score.length ; i++){ score[i] = scan.nextInt(); //直接在遍歷賦值時進行最大值的計算 if(maxscore <= score[i]){ maxscore = score[i]; } } //獲取數組中的最大值 /*int maxscore = 0; for(int i=0;i<score.length;i++){ if(maxscore < score[i]){ maxscore = score[i]; } }*/ //遍曆數組,計算學生的成績,並且輸出等級 char level; for(int i=0;i<score.length;i++){ if(maxscore - score[i] <=10){ level = 'A'; }else if(maxscore - score[i] <=20){ level = 'B'; }else if(maxscore - score[i] <=30){ level = 'C'; }else{ level = 'D'; } System.out.println("student" + i +"score is"+score[i]+"grade is "+level); } } }
多維數組的使用(二維)
1 //都是正確的 2 int[][] arr = new int[][]{{1,2},{2,3,4},{4,5,6}}; 3 4 int[] arr1[] = new int[][]{{1,2},{2,3,4},{4,5,6}}; 5 6 int arr2[][] = new int[][]{{1,2},{2,3,4},{4,5,6}}; 7 8 int[][] arr3 = {{1,2},{2,3,4},{4,5,6}};//類型推斷 9 10 int[][] arr4; 11 arr4 = {{1,2},{2,3,4},{4,5,6}};//錯誤的,無法識別數組的類型
數組的長度:
遍歷二維數組(雙層for循環)
for(int i = 0 ; i<arr.length ; i++) { for(j = 0 ; j<arr[i].length ; j++) {
System.out.print(arr[i][j]+""); }
System.out.println();
}
二維數組的使用
規定:二維數組分為外層數組的元素,內層數組的元素
int[][] arr = new int[4][3]; //外層元素:arr[0] 、arr[1]等 //內層元素:arr[0][0]等 //數組的默認值 int[][] arr = new int[4][3]; System.out.println(arr[0]);//輸出地址值,外層元素的初始化值,就是地址值 System.out.println(arr[0][1]);//0,記憶體元素的初始化值,與一維數組相同 int[][] arr = new int[4][]; System.out.println(arr[0]); //無論是什麼類型的二維數組,後面一個沒有數值,都輸出null System.out.println(arr[0][1]);//報錯
二維數組的記憶體解析
數據的存儲結構:
線性表(一對一):順序表(例如:數組)、鏈表、棧、隊列
樹形結構(一對多):二叉樹
圖形結構(多對多)
聲明:int[] x,y[]; 在給x,y變數賦值以後,以下選項允許通過編譯的是: int[] x,y[];相當於 int[] x;與 int[] y[]; a ) x[0] = y; no //x是一維的,y是二維的,x[0]就是int型的一個數 b) y[0] = x; yes c) y[0][0] = x; no d) x[0][0] = y; no e) y[0][0] = x[0]; yes f) x = y; no