Java基礎複習第五天,陣列定義(靜態、動態初始化),陣列儲存機制及陣列的反轉、排序、遍歷
阿新 • • 發佈:2018-11-30
一 陣列定義和訪問
1.案例引入:
如果需要定義多個變數,那麼我們建議使用容器,一次性儲存多個數據,統一操作。
2.容器:
是將多個數據儲存到一起,每個資料稱為該容器的元素。
3.Java中容器: 陣列,集合
陣列:是一個長度固定的容器,而且容器中的元素的資料型別要一致
4.陣列的三種定義方式
//格式一:(靜態初始化) int[] arr1=new int[]{1,2,3};//int arr1[]=new int[]{1,2,3} 效果一樣的 //格式二:簡化版(靜態初始化) int[] arr2={1,2,3}; //格式三:動態初始化 int[] arr3=new int[3];
二 陣列原理記憶體圖
1.什麼是記憶體
程式執行時,所佔的那部分空間,斷電丟失
2.Java的記憶體五大區
棧區(stack): 儲存區域性變數(我們目前學的所有變數,都在這個區)
堆區(heap): 儲存物件(也就是new出來東西)
方法區(method area): 儲存.class檔案
本地方法區(native):和作業系統有關
程式計數器區/寄存區:和CPU相關
3.陣列的記憶體圖(見下圖)
a.單個數組的記憶體圖
b.兩個或多個數組的記憶體圖
c.兩個陣列名指向同一個陣列的記憶體圖
tip:“同居原理”即:兩個陣列同用一個相同的地址,其中一方陣列的元素髮生改變,另一方 也同時發生改變(兩個人共用一張白紙,一個人畫完後,另一個人再拿這張紙還是白的嗎?)
4.陣列的常見異常
1.陣列越界異常(ArrayIndexOutOfBoundsException)
訪問了不存在的索引的元素
2.空指標異常(NullPointerException)
陣列名中的地址清空後,繼續訪問陣列的某個元素
三.Arrays類
常用的兩個方法
String s = Arrays.toString(陣列);//把陣列中每個元素取出,拼接一個完整的字串給你 Arrays.sort(陣列);//把陣列中元素進行升序排序 排序陣列: 如果是數值型別,按照值的大小升序排序 如果是字元型別,按照字元的ASCII碼值升序排序 如果是字串型別,按照字串的首字母升序排序,首字母一樣按照第二個字母升序排序,...
四.練習
1.陣列獲取最大值元素
求出陣列中最大的那個元素
//1.陣列
int[] nums = {32,54,3,754,6,13,4,53,6,34,645,7,568};
//2.求陣列的最大值
//定義一個擂主變數
int max = nums[0];
//依次取出每個元素(遍歷),不要第一個
for(int i = 1;i < nums.length;i++) {
//選手元素 nums[i]
if (max < nums[i]) {
max = nums[i]; //選手 大於 擂主 那麼選手要成為新的擂主
}
}
//所有元素都比較完畢之後,max中儲存的就是最大值
//3.列印
System.out.println("最大值是:"+max);
2.陣列反轉
//陣列反轉方法一:
//重新定義新陣列,令a陣列的首個索引等於b陣列的最後索引
private static void Arrays2() {
int[] arrs = {1, 2, 3, 4, 5, 6, 7};
int[] arrs2 = new int[arrs.length];
for (int i = 0; i < arrs.length; i++) {
arrs2[arrs.length - i - 1] = arrs[i]; //arrs和arrs2陣列長度一致,都為7,所以arrs[首]+arrs2[末]=陣列長度-1,
//即(arrs)[0]+(arrs2)[6]=7-1 (arrs)[1]+(arrs2)[5]=7-1
}
for (int a : arrs2) {
System.out.println(a);
}
}
//陣列反轉方法二:指標索引交換
private static void Arrays3() {
int arr[] = {1, 2, 3, 4, 5};
int maxOfIndex = arr.length - 1;
int minOfIndex = 0;
//while迴圈
while (maxOfIndex > minOfIndex) { //當最大索引<=最小索引時停止
int temp = arr[maxOfIndex];
arr[maxOfIndex] = arr[minOfIndex];
arr[minOfIndex] = temp;
maxOfIndex--;
minOfIndex++;
}
/*
for迴圈遍歷
for (int maxOfIndex=arr.length-1,minOfIndex=0;maxOfIndex>minOfIndex; minOfIndex++, maxOfIndex-- ) {
int temp=arr[maxOfIndex];
arr[maxOfIndex]=arr[minOfIndex];
arr[minOfIndex]=temp;
}*/
//增強for遍歷
for (int foreach : arr) {
System.out.println(foreach);
}
// Arrays.toString 工具類Arrays可直接列印
System.out.println(Arrays.toString(arr));
}
3. 求陣列平均值
private static void No2(){
//求陣列平均值,要求保留一位小數
int[] arr1={1,2,3,4,5};
int sum=0;
for (int num:arr1){
sum+=num;
}
System.out.println(sum);
int i = sum / arr1.length;
Double avg = Double.valueOf(i); //這裡Double是double的包裝類,等複習到的時候再說
double avg2=i; //型別轉換:範圍小——>範圍大 無需強轉
System.out.println(avg);
System.out.println(avg2);
}
4.利用陣列列印撲克牌
//這裡沒有大小王,等複習到集合的時候用集合做“鬥地主”遊戲比較方便
private static void No5(){
String[] color={"♣","♠","♦","♥"};
String[] number={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
for (int i = 0; i < color.length; i++) {
for (int i1 = 0; i1 < number.length; i1++) {
System.out.print(color[i]+number[i1]+"\t");
}
System.out.println();
}
}
5.判斷陣列是否對稱
private static String arrIsOrNotSymmetry(int[] arr){
int max=arr.length-1;
int min=0;
for (int i = 0; i < arr.length; i++) {
if(arr[min]==arr[max]){
max--;
min++;
}else{
return "不對稱";
}
//有沒有這個if的效果是一樣的,因為陣列本身對稱
if(max<=min){
break;
}
}
return "對稱";
}
6.陣列排序
//最簡單的方法,利用Arrays工具類
int[] arr={1,8,6,3,5};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//這裡Arrays.sort()只能正序排序,想倒敘就在搞下上面的陣列反轉(⊙⊙)!
氣泡排序、插入排序什麼的單獨整一篇