二維數組

二維數組:就是元素爲一維數組的一個數組。

格式1:(動態初始化,列固定)
  數據類型[][] 數組名 = new 數據類型[m][n];
  m:表示這個二維數組有多少個一維數組。
  n:表示每個一維數組的元素有多少個。

注意:
  A:如下格式也能夠表示二維數組
    a:數據類型 數組名[][] = new 數據類型[m][n];
    b:數據類型[] 數組名[] = new 數據類型[m][n];
  B:注意下面定義的區別
    int x;     int[] x;
    int y;     int[] y[];
    int x,y;    int[] x,y[];(等價於定義一維數組x,訂價二維數組y;)java

class Array2Demo1 {
    public static void main(String[] args) {
         //定義一個二維數組
         int[][] arr = new int[3][2];
         //定義了一個二維數組arr
         //這個二維數組有3個一維數組的元素
         //每個一維數組有2個元素
         
         //輸出二維數組名稱
         System.out.println(arr); //地址值    [[I@1db9742
         
         //輸出二維數組的第一個元素一維數組的名稱
         System.out.println(arr[0]); //地址值    [I@106d69c
         System.out.println(arr[1]); //地址值    [I@52e922
         System.out.println(arr[2]); //地址值    [I@25154f
         
         //輸出二維數組的元素
         System.out.println(arr[0][0]); //0
         System.out.println(arr[0][1]); //0
    }
}

 

格式2:(動態初始化,列變化)
  數據類型[][] 數組名 = new 數據類型[m][];

  m:表示這個二維數組有多少個一維數組。
  列數沒有給出,能夠動態的給。這一次是一個變化的列數。數組

class Array2Demo2 {
    public static void main(String[] args) {
        //定義一個二維數組
        int[][] arr = new int[3][];
        
        System.out.println(arr);//[[I@1db9742
        System.out.println(arr[0]);//null
        System.out.println(arr[1]);//null
        System.out.println(arr[2]);//null
        
        //動態的爲每個一維數組分配空間
        arr[0] = new int[2];
        arr[1] = new int[3];
        arr[2] = new int[1];
        
        System.out.println(arr[0]);//[I@106d69c
        System.out.println(arr[1]);//[I@52e922
        System.out.println(arr[2]);//[I@25154f
        
        System.out.println(arr[0][0]);//0
        System.out.println(arr[0][1]);//0
        
        //System.out.println(arr[0][2]);
        //錯誤:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
        
        arr[1][0] = 100;
        arr[1][2] = 200;
        
    }
}

 

格式3:(靜態初始化)
基本格式:
  數據類型[][] 數組名 = new 數據類型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};spa

簡化版格式:
  數據類型[][] 數組名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};

  舉例:
    int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
    int[][] arr = {{1,2,3},{4,5},{6}};code

class Array2Demo3 {
    public static void main(String[] args) {
        //定義數組
        int[][] arr = {{1,2,3},{4,5},{6}};
        
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        
        System.out.println(arr[0][0]); //1
        System.out.println(arr[1][0]); //4
        System.out.println(arr[2][0]); //6
        
        System.out.println(arr[0][1]); //2
        System.out.println(arr[1][1]); //5
        
        //越界
        //System.out.println(arr[2][1]); //錯誤
    }
}

 

二維數組遍歷:對象

  外循環控制的是二維數組的長度,其實就是一維數組的個數。blog

  內循環控制的是一維數組的長度。io

class Array2Demo4 {
    public static void main(String[] args) {
        //定義一個二維數組
        int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
        
        //請問誰表明{1,2,3}
        //arr[0]就是第一個數組
        //arr[0] = {1,2,3};
        for(int x=0; x<arr[0].length; x++) {
            System.out.println(arr[0][x]);
        }
        System.out.println("--------------");
        
        for(int x=0; x<arr[1].length; x++) {
            System.out.println(arr[1][x]);
        }
        System.out.println("--------------");
        
        for(int x=0; x<arr[2].length; x++) {
            System.out.println(arr[2][x]);
        }
        System.out.println("--------------");
        
        //用循環改進
        for(int x=0; x<3; x++) {
            for(int y=0; y<arr[x].length; y++) {
                System.out.print(arr[x][y]+" ");
            }
            System.out.println();
        }
        System.out.println("--------------");
        
        //這個時候,3是咱們根據上面的代碼得出來的
        //可是,它不能針對任何的數組均可以這樣
        //因此,咱們應該想辦法改進
        //其實,外面的這個循環的長度就是二維數組的長度
        
        for(int x=0; x<arr.length; x++) {
            for(int y=0; y<arr[x].length; y++) {
                System.out.print(arr[x][y]+" ");
            }
            System.out.println();
        }
        System.out.println("--------------");
        
        //用方法改進
        //調用方法
        printArray2(arr);
        System.out.println("--------------");
        
        //咱們再來一個列數是變化的
        int[][] arr2 = {{1,2,3},{4},{5,6,7},{8,9}};
        printArray2(arr2);
    }
    
    /*
        需求:遍歷二維數組
        兩個明確:
            返回值類型:void
            參數列表:int[][] arr
    */
    public static void printArray2(int[][] arr) {
        for(int x=0; x<arr.length; x++) {
            for(int y=0; y<arr[x].length; y++) {
                System.out.print(arr[x][y]+" ");
            }
            System.out.println();
        }
    }
}

 

二維數組求和class

需求:
  公司年銷售額求和,某公司按照季度和月份統計的數據以下:單位(萬元)
  第一季度:84,65,46
  第二季度:73,35,97
  第三季度:28,49,80
  第四季度:15,55,93

分析:
  A:把題目的數據用二維數組來表示
    int[][] arr = {{84,65,46},{73,35,97},{28,49,80},{15,55,93}};
  B:如何求和呢?
    求和其實就是獲取到每個元素,而後累加便可。
  C:定義一個求和變量sum,初始化值是0。
  D:經過遍歷就能夠獲得每個二維數組的元素。
  E:把元素累加便可。
  F:最後輸出sum,就是結果。thread

class Array2Demo5 {
    public static void main(String[] args) {
        //把題目的數據用二維數組來表示
        int[][] arr = {{84,65,46},{73,35,97},{28,49,80},{15,55,93}};
        
        //定義一個求和變量sum,初始化值是0。
        int sum = 0;
        
        //經過遍歷就能夠獲得每個二維數組的元素。
        for(int x=0; x<arr.length; x++) {
            for(int y=0; y<arr[x].length; y++) {
                //把元素累加便可。
                sum += arr[x][y];
            }
        }
        
        //最後輸出sum,就是結果。
        System.out.println("一年的銷售額爲:"+sum+"萬元");
    }
}

 

Demo6:打印楊輝三角形(行數能夠鍵盤錄入)import

    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1

分析:看這種圖像的規律
  A:任何一行的第一列和最後一列都是1
  B:從第三行開始,每個數據是它上一行的前一列和它上一行的本列之和。

步驟:
  A:首先定義一個二維數組。行數若是是n,咱們把列數也先定義爲n。
    這個n的數據來自於鍵盤錄入。
  B:給這個二維數組任何一行的第一列和最後一列賦值爲1
  C:按照規律給其餘元素賦值
    從第三行開始,每個數據是它上一行的前一列和它上一行的本列之和。
  D:遍歷這個二維數組。

import java.util.Scanner;

class Array2Demo6 {
    public static void main(String[] args) {
        //建立鍵盤錄入對象
        Scanner sc = new Scanner(System.in);
        
        //這個n的數據來自於鍵盤錄入。
        System.out.println("請輸入一個數據:");
        int n = sc.nextInt();
        
        //定義二維數組
        int[][] arr = new int[n][n];
        
        //給這個二維數組任何一行的第一列和最後一列賦值爲1
        for(int x=0; x<arr.length; x++) {
            arr[x][0] = 1; //任何一行第1列
            arr[x][x] = 1; //任何一行的最後1列
        }
        
        //按照規律給其餘元素賦值
        //從第三行開始,每個數據是它上一行的前一列和它上一行的本列之和。
        for(int x=2; x<arr.length; x++) {
            //這裏若是y<=x是有個小問題的,就是最後一列的問題
            //因此這裏要減去1
            //而且y也應該從1開始,由於第一列也是有值了
            for(int y=1; y<=x-1; y++) {
                //每個數據是它上一行的前一列和它上一行的本列之和。
                arr[x][y] = arr[x-1][y-1] + arr[x-1][y];
            }
        }
        
        //遍歷這個二維數組。
        /*
        for(int x=0; x<arr.length; x++) {
            for(int y=0; y<arr[x].length; y++) {
                System.out.print(arr[x][y]+"\t");
            }
            System.out.println();
        }
        */
        //這個時候,要注意了,內循環的變化必須和曾經講過的九九乘法表相似
        for(int x=0; x<arr.length; x++) {
            for(int y=0; y<=x; y++) {
                System.out.print(arr[x][y]+"\t");
            }
            System.out.println();
        }
    }
}

 

Java中的參數傳遞規律:


  基本類型:形式參數的改變對實際參數沒有影響
  引用類型:形式參數的改變直接影響實際參數。

    例如數組傳遞的是地址值,形參經過接收實參的地址改變數組元素的值後,至關於元素從新賦值。

class Demo7 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println("a:"+a+",b:"+b); //a:10,b:20
        change(a,b);
        System.out.println("a:"+a+",b:"+b); //????  a:10,b:20

        int[] arr = {1,2,3,4,5}; 
        change(arr);
        System.out.println(arr[3]); //????  8
    }

    public static void change(int a,int b) { //a=10,b=20
        System.out.println("a:"+a+",b:"+b); //a:10,b:20
        a = b;    //a=20
        b = a + b; //b=40
        System.out.println("a:"+a+",b:"+b); //a:20,b:40
    }

    public static void change(int[] arr) { //arr={1,2,3,4,5};
        for(int x=0; x<arr.length; x++) {
            if(arr[x]%2==0) {
                arr[x]*=2;
            }
        }
        //arr={1,4,3,8,5};
    }
}
相關文章
相關標籤/搜索