1. 程式人生 > >Java基礎複習第五天,陣列定義(靜態、動態初始化),陣列儲存機制及陣列的反轉、排序、遍歷

Java基礎複習第五天,陣列定義(靜態、動態初始化),陣列儲存機制及陣列的反轉、排序、遍歷

一 陣列定義和訪問

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()只能正序排序,想倒敘就在搞下上面的陣列反轉(⊙⊙)!

氣泡排序、插入排序什麼的單獨整一篇