1. 程式人生 > 實用技巧 >Java陣列二

Java陣列二

多維陣列決定陣列中有多少列

package com.xiaojie.arrary;

public class ArrayDemo05 {
    public static void main(String[] args) {

        //[4][2]  四行兩列
        /*
            1,2     array[0]
            2,3     array[1]
            3,4     array[2]
            4,5     array[3]
         */
        int[][] array = {{1,2},{2,3},{5,6},{4,5}}; //賦值二維陣列

        printArray(array[0]);
        System.out.println(array[0][1]);
        System.out.println(array[2][1]);
        System.out.println(array[3][0]);

        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length ; j++) {
                System.out.println(array[i][j]); //列印二維陣列
            }
        }
    }

    public static void printArray(int[] arrays) {
        for (int i = 0; i < arrays.length; i++) {
            System.out.print(arrays[i]+" ");
        }
        System.out.println();
    }

}

package com.xiaojie.arrary;

import java.util.Arrays;

public class ArrayDemo06 {
    public static void main(String[] args) {
        int[] a = {1,2,3,4,9090,1233,223,543};

        System.out.println(a); //返回陣列物件
        //列印陣列元組
        System.out.println(Arrays.toString(a));
        ArrayDemo06 arrayDemo06 = new ArrayDemo06();
        arrayDemo06.prinArray(a);

        Arrays.sort(a); //陣列進行排序:升序
        System.out.println(Arrays.toString(a));
    }

    //格式化列印陣列
    public void prinArray(int[] a) {
        for (int i = 0; i < a.length; i++) {
            if (i==0) {
                System.out.print("[");
            }
            if (i==a.length-1) {
                System.out.print(a[i]+"]\n");
            }else {
                System.out.print(a[i]+", ");
            }
        }
    }

}
package com.xiaojie.arrary;

import java.util.Arrays;

public class ArrayDemo07 {
    public static void main(String[] args) {
        int[] array = {10,1,5,23,534,231};
        //輸出陣列
        System.out.println(Arrays.toString(array));
        //排序輸出陣列
        Arrays.sort(array);
        System.out.println(Arrays.toString(array));
        //賦值輸出陣列
        Arrays.fill(array,2,4,3);   //從下標2開始到下標4結束(不包括結尾的下標),賦值為3
        System.out.println(Arrays.toString(array)); //[1, 5, 3, 3, 231, 534]
        //比較陣列
        int[] n = {1,2,3};
        int[] i = {1,2,3,4,5,6,7,8};
        int[] s = {3,2,1,33,11,643};
        System.out.println(Arrays.equals(n,i));
        //查詢陣列元素,需要先排序再查詢
        Arrays.sort(s);
        System.out.println(Arrays.binarySearch(s , 33));
        System.out.println(Arrays.binarySearch(s , 2,4,33));  //從下標2開始到下標4結束(不包括結尾的下標),是否有等於33的元素
    }
}

package com.xiaojie.arrary;

//氣泡排序
//1.比較陣列中,兩個相鄰的元素,如果第一個數比第二個數大,我們就交換他們的位置
//2.每一次比較,都會產生出一個最大,或者最小的數字
//3.下一輪則,可以少一次排序
//4.依次迴圈,直至結束

import java.util.Arrays;

public class ArrayDemo08 {
    public static void main(String[] args) {
        int[] a = {30,20,50,10,40,11,4,5,1};
        int[] sort = sort(a);
        System.out.println(Arrays.toString(sort));
    }

    public static int[] sort(int[] array) {
        //臨時變數
        int temp = 0;

        //外層迴圈,判斷程式要執行多少次
        for (int i = 0; i < array.length-1; i++) {
            /*
            外層迴圈-1是因為在此之前的前一個數值已經是內層迴圈的最小值(最少迴圈次數)
            如果去掉-1,執行到內層迴圈時判斷也是失敗的,所以無需進行多餘的判斷
             */
            boolean flag = false;
            //內層迴圈,比值判斷兩個數,如何第一個數比第二個數大,則交換位置
            for (int j = 0; j < array.length-1-i; j++) {
                /*
                內層迴圈-1是因為最後一個下標的前一個下標已經和最後一個下標相比較大小調整位置了
                如果去掉-1迴圈到最後一個下標時,當前下標+1與當前下標相比較,是超出陣列範圍的

                -i是因為內層迴圈執行開始直至判定失敗,會從陣列中選出最大的數值調整為最後的下標
                由於已經選出最大數值調整到最後的下標,無需進行多餘的迴圈,所以累計-1
                 */
                if (array[j+1]<array[j]){
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                    flag = true;
                }
            }
            if (flag == false) { //看似是優化,但在每次執行時會多出賦值與判斷的操作
                break;
            }
        }
        return array;
    }
}

簡潔版

package com.xiaojie.arrary;

//氣泡排序
//1.比較陣列中,兩個相鄰的元素,如果第一個數比第二個數大,我們就交換他們的位置
//2.每一次比較,都會產生出一個最大,或者最小的數字
//3.下一輪則,可以少一次排序
//4.依次迴圈,直至結束

import java.util.Arrays;

public class ArrayDemo08 {
    public static void main(String[] args) {

        int[] a = {4,2,1,5,3};
        int[] array = (array(a));
        System.out.println(Arrays.toString(array));
    }

    public static int[] array(int[] a) {
        for (int i = 0; i < a.length-1; i++) {
            int pem = 0;
            for (int j = 0; j < a.length-1-i; j++) {
                if (a[j]>a[j+1]) {
                    pem = a[j+1];
                    a[j+1] = a[j];
                    a[j] = pem;
                }
            }
        }
        return a;
    }
}

package com.xiaojie.arrary;

public class ArrayDemo09 {
    public static void main(String[] args) {
        //1.建立一個二維陣列 11 * 11    0:沒有棋子, 1:黑棋, 2:白棋

        int[][] array1 = new int[11][11];
        array1[1][2] = 1;
        array1[2][3] = 2;
        //輸出原始的陣列
        System.out.println("輸出原始的陣列");

        for (int[] ints : array1) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }

        System.out.println("========================");
        //轉換為稀釋陣列儲存
        //獲取有效值的個數
        int sum = 0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (array1[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("有效值的個數"+sum);

        //2.建立一個稀疏陣列的陣列
        int[][] array2 = new int[sum+1][3];

        array2[0][0] = 11;
        array2[0][1] = 11;
        array2[0][2] = sum;

        //遍歷二維陣列,將非零的值,存放稀陣列中
        int count=0;
        for (int i = 0; i < array1.length; i++) { //總共有多少列,統計的是列數物件
            for (int j = 0; j < array1[i].length; j++) { //單行的長度,單行有多少個數值
                if (array1[i][j]!=0) {
                    count++;
                    array2[count][0] = i;  //標記列數座標
                    array2[count][1] = j;  //標記行數座標
                    array2[count][2] = array1[i][j];  //獲得具體的數值
                }
            }
        }
        //輸出稀疏陣列
        System.out.println("稀疏陣列");
        for (int i = 0; i < array2.length; i++) {  //總共有多少列,統計的是列數物件
            System.out.println(array2[i][0]+"\t"
                    +array2[i][1]+"\t"
                    +array2[i][2]+"\t");
        }

        System.out.println("========================");
        System.out.println("還原");
        //1.讀取稀疏陣列
        int[][] array3 = new int[array2[0][0]][array2[0][1]];
        
        //2.給其中的元素還原它的值
        for (int i = 1; i < array2.length; i++) {
            array3[array2[i][0]][array2[i][1]] = array2[i][2];  //根據稀疏陣列的記錄表還原值

            
        }
        //3.列印
        System.out.println("輸出還原的陣列");
        for (int[] ints : array3) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}