Java二維數組以及多維數組的定義及應用


一、二維數組以及多維數組

1、二維數組的定義:

​ 在一維數組中定義每一個元素也是一個數組元素,這樣的數組稱為”二維數組“

​ 多維數組就是在一維數組上再次定義二維數組或三位數組等。

​ 一維數組定義 int [] array={1,2,3}

//定義三個長度的二維數組,其數組的每一個元素是一個一維數組
int [][] arrays={{},{},{}};
或者
int [][] arrays=new int [3][2];//等號右邊的左邊[]中表示二維數組的長度,其中2可以省略,3不能省略
//注意:等號左邊有幾個[]就表示幾維

//1、定義二維數組
	int [][] array;
//定義時給二維數組賦值 3個長度的二維數組里面的一維數組的長度不一定相等
	int [][] array2={{1,2,3},{4,5},{7,8}}
//定義時只指定大小,不給定初始值
int [][]array3=new int[3][];//等價{{},{},{}}
//array3[0][0]=1;//賦值時 空指針異常,因為里面的一維數組是空的
//定義一個3個長度的二維數組,里面的元素長度是2
int array4[][]=new int[3][2];
//給元素賦值
array4[0][0]=1;
//輸出二維數組中的所有元素
for(int i=0;i<array4.length;i++){
    //System.out.println(array4[i]);
    for(int j=0;j<array4[i].length;j++){
        System.out.println(array[i][j]);
    }
}

二、二維數組的應用

1、定義5*5的矩陣,計算最大值最小值

public class Test{
    public static void main(String[] args) {
        //定義一個5*5的二維數組
       int [][] array=new int[5][5];
       //定義最大值,並初始化
       int max=0;
       //定義最小值,並初始化
       int min=0;
       //為二維數組中的每一個元素賦上一個0-100的整數值,並遍歷輸出二維數組
        for (int i = 0; i <array.length ; i++) {
            for (int j = 0; j <array[i].length ; j++) {
                array[i][j]=(int)(Math.random()*100);
                System.out.print(array[i][j]+"\t");
            }
            System.out.println();//換行
        }
        //將數組中的第一個元素賦值給max
        max =array[0][0];
        for (int i = 0; i <array.length ; i++) {
            for (int j = 0; j <array[i].length ; j++) {
                //如果數組中元素大於max,則將元素賦值給max
                if(array[i][j]>=max){
                    max=array[i][j];
                }
            }
        }
        //輸出二維數組中的最大值
        System.out.println("最大值為:"+max);
        //將數組中的第一個元素賦值給min
        min =array[0][0];
        for (int i = 0; i <array.length ; i++) {
            for (int j = 0; j <array[i].length ; j++) {
                //如果元素小於min,則將元素賦值給min
                if(array[i][j]<=min){
                    min=array[i][j];
                }
            }
        }
        //輸出二維數組中的最小值
        System.out.println("最小值為:"+min);
    }
}

2、五子棋游戲

public class Test{
    //定義一個字符串型20*20的二維數組
    static String [][] qipan=new String[20][20];
    public static void main(String[] args) {
        System.out.println("------------------------------五子棋游戲------------------------------");
        //初始化棋盤
        for (int i = 0; i <qipan.length; i++) {
            for (int j = 0; j <qipan[i].length; j++) {
                qipan[i][j]="+";
            }
        }
        printQipan();
        System.out.println("游戲開始:");
        Scanner sc=new Scanner(System.in);
        while(true) {
            System.out.println("請玩家(黑棋)落子:");
            System.out.print("請輸入棋子的行數(1-20):");
            int num1 = sc.nextInt();
            System.out.print("請輸入棋子的列數(1-20):");
            int num2 = sc.nextInt();
            if (num1 <= 0 || num1 > 20 || num2 <= 0 || num2 > 20 ) {
                System.out.println("落子超出棋盤邊界,請重新落子!");
                continue;
            } else {
                if( qipan[num1 - 1][num2 - 1] != "+"){
                    System.out.println("該位置已有棋子,請重新落子!");
                    continue;
                }else{
                    qipan[num1-1][num2-1]="⭕";
                }
            }
            //白棋落子
            int row=0;
            int col=0;
//            System.out.println("白棋思考中...");
            while(true){
                row=(int)(Math.random()*20);
                col=(int)(Math.random()*20);
                if(qipan[row][col]=="+"){
                    break;
                }
            }
            qipan[row][col]="●";
            //打印棋盤
            printQipan();
            //判斷輸贏
            if(judge()){
                System.out.println(s+"贏了");
                break;
            }
        }
    }
    //打印棋盤
    public static void printQipan(){
        for (int i = 0; i <qipan.length ; i++) {
            for (int j = 0; j <qipan[i].length ; j++) {
                System.out.print(qipan[i][j]+"\t");
            }
            System.out.println();
        }
    }
    //判斷輸贏的方法
    static String s="";
    public static boolean judge(){
        boolean flag=false;
        for (int i = 0; i <qipan.length; i++) {
            for (int j = 0; j <qipan[i].length ; j++) {
                if(qipan[i][j]=="⭕"||qipan[i][j]=="●"){
                    //判斷橫向
                    if(j<16&&
                            qipan[i][j]==qipan[i][j+1]
                            &&qipan[i][j]==qipan[i][j+2]
                            &&qipan[i][j]==qipan[i][j+3]
                            &&qipan[i][j]==qipan[i][j+4]){
                        s=qipan[i][j];
                        flag=true;
                        break;
                    }
                    //判斷右斜下
                    else if(i<16&&j<16&&qipan[i][j]==qipan[i+1][j+1]
                            &&qipan[i][j]==qipan[i+2][j+2]
                            &&qipan[i][j]==qipan[i+3][j+3]
                            &&qipan[i][j]==qipan[i+4][j+4]){
                        s=qipan[i][j];
                        flag=true;
                        break;
                    }
                    //判斷縱向
                    else if(i<16&&qipan[i][j]==qipan[i+1][j]
                            &&qipan[i][j]==qipan[i+2][j]
                            &&qipan[i][j]==qipan[i+3][j]
                            &&qipan[i][j]==qipan[i+4][j]){
                        s=qipan[i][j];
                        flag=true;
                        break;
                    }
                    //判斷左斜下
                    else if(i<16&&j>3&&qipan[i][j]==qipan[i-1][j-1]
                            &&qipan[i][j]==qipan[i-2][j-2]
                            &&qipan[i][j]==qipan[i-3][j-3]
                            &&qipan[i][j]==qipan[i-4][j-4]){
                        s=qipan[i][j];
                        flag=true;
                        break;
                    }
                }
            }
        }
        return flag;
    }
}

拓展:利用二分法查找數組中的元素

public class Test {
    public static void main(String[] args) {
        // 1、指定一個20個長度的數組 隨機數
        int [] array=new int[20];
        for (int i = 0; i <array.length; i++) {
            array[i]=(int)(Math.random()*100);
        }
        //輸出數組中的每一個元素
        System.out.println("數組中的元素為:");
        System.out.println(Arrays.toString(array));
        //  2、排序 (升序)
        Arrays.sort(array);
        //輸出排序后的數組
        System.out.println("排序后的數組為:");
        System.out.println(Arrays.toString(array));
        //  3、輸入一個目標數
        Scanner sc=new Scanner(System.in);
        System.out.print("請輸入想要查找的數字:");
        int num=sc.nextInt();
        //  3、比較
        //定義 最小值下標  最大值下標 中間值下標  查找的目標下標
        /**
         *  最小下標    0
         *  *   最大下標   length-1
         *  *
         *  *  循環條件:  最小值小標<=最大值下標
         *     中間下標:  middle = (最小值+最大值)/2
         *  *   如果中間值比目標大  說明 在左邊  改變最大值下標 = 中間值下標-1
         *  *   如果中間值比目標小  說明 在右邊   改變最小值小標 = 中間值下標+1
         *  *   如果相等   就break
         *  *    一直這樣比較 結束的條件是什么
         */
        //最小值小標
        int minIndex=0;
        //最大值下標
        int maxIndex=array.length-1;
        //中間值下標
        int middle;
        //目標值下標
        int index=-1;
        //計數器
        int count=0;
        while(minIndex<=maxIndex){
            count++;
            middle=(minIndex+maxIndex)/2;
            if(num<array[middle]){
                maxIndex=middle-1;
            }else if(num>array[middle]){
                minIndex=middle+1;
            }else {
                index=middle;
                break;
            }
        }
        if(index!=-1){
            System.out.println("目標已找到");
            System.out.print("共查詢次數:"+count+"\n");
            System.out.print("目標數下標為:"+index);
        }else{
            System.out.println("目標不存在");
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM