1. 程式人生 > 其它 >Java重溫學習筆記,關於陣列

Java重溫學習筆記,關於陣列

一、觀察下面程式碼,程式碼輸出包括在裡面:

class MyDemo {
    public static void main ( String[] args ) {
        int[] myArray = {1, 2, 3, 4, 5};
        changeIt1(myArray);
        for(int j : myArray)
            System.out.print(j + " " ); // 輸出:1 2 3 4 5 

        System.out.println();

        changeIt2(myArray);
        
for(int j : myArray) System.out.print(j + " " ); // 輸出:2 3 4 5 6 } static void changeIt1(int[] param1) { param1 = null ; // 並不改變myArray的引用地址, 也沒改變裡面的值 } static void changeIt2(int[] param1) { for(int j=0; j<param1.length; j++) param1[j] = param1[j] +1; //
改變裡面的值 } }

java 基本資料型別傳遞引數時是值傳遞 ;引用型別傳遞引數時是引用傳遞 。然而陣列雖然是引用傳遞 ,但是“param1= null”這條語句,只是將引用param1不指向任何物件 ,並不會對原先指向的物件資料進行修改 。

二、利用陣列做氣泡排序、選擇排序

class MyDemo {
    public static void main ( String[] args ) {
       int[] myArray = {26,15,29,66,99,88,36,77,111,1,6,8,8};
       
       System.out.println(
"當前順序:"); for (int i : myArray) { System.out.print(i + ","); } System.out.println(); doBubbleSort(myArray); System.out.println("氣泡排序後:"); for (int i : myArray) { System.out.print(i + ","); } System.out.println(); myArray = new int[]{34,23,56,34,7,89,326,177,6,51,106,88,88}; System.out.println("當前順序:"); for (int i : myArray) { System.out.print(i + ","); } System.out.println(); doSelectionSort(myArray); System.out.println("選擇排序後:"); for (int i : myArray) { System.out.print(i + ","); } System.out.println(); } // 氣泡排序 public static void doBubbleSort(int[] param1) { int temp; for (int i=0; i<param1.length-1; i++) { for (int j=0; j<param1.length-1-i; j++) { // 迴圈的長度逐漸縮短,因為每次都會有一個大數挪到後面 if (param1[j] > param1[j+1]) { // 如果前面的大於後面的,則置換;即大數往後挪。注意:此處陣列引用是[j+1],所以迴圈體j變數終止值是param1.length-1-i temp = param1[j]; param1[j] = param1[j+1]; param1[j+1] = temp; } } } } // 選擇排序 public static void doSelectionSort(int[] param1) { int minValuePos; for (int i=0; i<param1.length-1; i++) { minValuePos= i; // 初始值 for (int j=i+1; j<param1.length; j++) { // 還有更小值 if (param1[minValuePos] > param1[j]) { minValuePos= j; } } // 將當前最小值,存放到i的位置 swapParam(param1, minValuePos, i); } } // 交換陣列中的兩個值,選擇排序中呼叫 private static void swapParam(int[] param1, int p1, int p2) { int temp = param1[p1]; param1[p1] = param1[p2]; param1[p2] = temp; } }