zoukankan      html  css  js  c++  java
  • 二维数组

    二维数组:就是元素为一维数组的一个数组。

    格式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;)

    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...}};

    简化版格式:
      数据类型[][] 数组名 = {{元素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}};

    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]); //错误
        }
    }

    二维数组遍历:

      外循环控制的是二维数组的长度,其实就是一维数组的个数。

      内循环控制的是一维数组的长度。

    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();
            }
        }
    }

    二维数组求和

    需求:
      公司年销售额求和,某公司按照季度和月份统计的数据如下:单位(万元)
      第一季度: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,就是结果。

    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:打印杨辉三角形(行数可以键盘录入)

        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]+"	");
                }
                System.out.println();
            }
            */
            //这个时候,要注意了,内循环的变化必须和曾经讲过的九九乘法表类似
            for(int x=0; x<arr.length; x++) {
                for(int y=0; y<=x; y++) {
                    System.out.print(arr[x][y]+"	");
                }
                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};
        }
    }



        
        
        

  • 相关阅读:
    Python数据结构之列表
    前端html表单与css样式
    Http协议基本知识
    PHP-CGI远程任意代码执行漏洞(CVE-2012-1823)修复方案
    云计算定义
    编译最新linux内核(version 4.4.2)
    nginx负载均衡
    Json转换利器Gson之实例一-简单对象转化和带泛型的List转化
    WebService--使用 CXF 开发 REST 服务
    WebService- 使用 CXF 开发 SOAP 服务
  • 原文地址:https://www.cnblogs.com/frank-me/p/11160382.html
Copyright © 2011-2022 走看看