美文网首页
二维数组

二维数组

作者: Finlay_Li | 来源:发表于2019-03-30 11:11 被阅读0次
    • 什么是多维数组
      多维数组和一维数组原理是一样的

    • 声明一个二维数组
      int[][] arr;

    1. 两个[ ] 标识二维数组
    2. int[] [] 二维数组:存放的是一维数组,一维数组中存放的是int类型的数据
    3. arr 名字
    • 为二维数组初始化并赋值
    1. 静态初始化:
      arr = new int[][]{ {1,2,3}, {4,5,6}, {7,8} };
    2. 动态初始化:
      方式一:二维数组中的每一个一维数组长度都一致
    //{ {0,0,55,0,0,0},{0,0,0,0,0,0},{0,6,0,0,0,0},{0,0,0,0,0,0}{0,0,0,0,0,0} }
    arr = new int[5][6];  
    arr[0][2] = 55;
    arr[2][1] = 6;
    

    方式二:二维数组中的每一个一维数组长度都不一致

    int[][]=arr;
    arr=new int[5][];
    arr{ {0}, {0,0}, {0,5,0}, {0,0,0,0}, {0,0,0,0,0}}
    arr[0] = new int[1];
    arr[1] = new int[2];
    arr[2] = new int[3];
    arr[3] = new int[4];
    arr[4] = new int[5];
    arr[2][1] = 5;
    
    • 二维数组的长度解读
    1. arr = new int[5][6];
      二维数组长度为5,可以放5个一维数组。
      每一个一维数组的长度为6固定存放6个元素
    2. arr=new int[5][];
      arr{ {0}, {0,0}, {0,5,0}, {0,0,0,0}, {0,0,0,0,0}}
      二维数组长度为5
      然后分开初始化,每一个一维数组的长度根据自定义的长度
    • 二维数组的遍历:多重循环

    一层取二维数组的一个元素(一维数组)
    二层取一维数组的元素

    示例

        int [][] arr;
        arr=new int[2][3];
        arr[0][1]=10;      
        arr[1][2]=20;
        
    1 )普通for循环遍历
           for(int i = 0; i < arr.length; i++){
                int[] as = arr[i]; //元素是一维数组,所以声明一维数组类型的变量来接收
                for(int j = 0; j < as.length; j++){
                    int a = as[j]; //元素是int类型变量
                    System.out.print(a + "\t"); //输出一维数组中的元素
                }
                System.out.println();
            }
        
        
          for(int i = 0; i < arr.length; i++){
                for(int j = 0; j < arr[i].length; j++){
                    System.out.print(arr[i][j] + "\t");
                }
                System.out.println();
           }
     2 )增强for循环遍历
        for(int[] as : arr){
            for(int a : as){
                System.out.print(a + "\t");
            }
        }
    
    • 数组中涉及的常见算法
      求://最大值 //最小值 //总和 //平均值 //数组的复制 //数组的反转 //数组的排序 //数组的遍历
    import java.util.Arrays;
    class ArrayTest4 {
        public static void main(String[] args) {
            int[] array = new int[]{5, 19, 0, 14, 66};
            //0      array.length - 1 - 0
            //1      array.length - 1 - 1
            //2         array.length - 1 - 2
            //最大值
            int max = array[0];
            for(int i = 1; i < array.length; i++){
                if(array[i] > max){
                    max = array[i];
                }
            }
            System.out.println("最大值为:" + max);
            //最小值
            int min = array[0];
            for(int i = 1; i < array.length; i++){
                if(array[i] < min){
                    min = array[i];
                }
            }
            System.out.println("最小值为:" + min);
            //总和
            int sum = 0;
            for(int i = 0; i < array.length; i++){
                sum += array[i];
            }
            System.out.println("总和为:" + sum);
            //平均值
            System.out.println("平均值为:" + (double)sum / array.length);
            //数组的复制
            int[] array2 = new int[array.length];
            for(int i = 0; i < array.length; i++){
                array2[i] = array[i];
            }
            for(int a : array){
                System.out.print(a + "\t");
            }
            System.out.println();
            //数组的反转
            for(int i = 0; i < array.length / 2; i++){
                int temp = array[i];
                array[i] = array[array.length - 1 - i];
                array[array.length - 1 - i] = temp;
            }
            //数组的排序
            Arrays.sort(array);
            //数组的遍历
            for(int a : array){
                System.out.print(a + "\t");
            }
        }
    }
    
    • 数组的冒泡排序
      1 确定一共要比多少轮
      2 每一轮比多少次
      3 为了提高效率,每一轮比完得出最值,那么这个最值下一轮就不用比了
      即:j < x.length-1-i
      4 根据什么来比
      5 替换的是数组中的元素!

    以下代码很早写的,高能预警...

    按照电脑的价格比较

    实例1:
    for(int i=0;i<computer.length-1;i++){//如果长度是5,则i是4,length-1需要比4轮。就会的出一个最大的值
        for(int j=0;j<computer.length-1-i;j++){
        //j<x.length-1 也可以,每一轮都比4次,但是每一次都得出一个最大值,那么最后的一次比较就多余了
        //所以x.length-1-i  每一轮,最后一次的最值都不用再比了
            if(computer[j].getPrice()>computer[j+1].getPrice()){
                        
                int  temp=computer[j].getPrice();//记录第一次开始比较的值
                        
                    computer[j].setPrice(computer[j+1].getPrice()); //如果j下标元素大于j+1元素,则把j的元素替换成j+1
                        
                    computer[j+1].setPrice(temp);//但是j+1就没有了,使用标记把j的值给j+1.这样一来,就等于他们的元素位置就换了
                        
                }
                    
            }
        }
        //数组排序完成后,遍历结果
        for(Computer1 b : computer){
                System.out.println(b.getPrice());
        }
        
        for(Computer1 c : computer){
                System.out.println(c.getDetails());
                //发现直接替换掉了对象中价格的属性
        }
    
    
    实例2:
            for(int i = 0; i < computers.length - 1; i++){
                for(int j = 0; j < computers.length - 1 - i; j++){
                
                    if(computers[j].getPrice() < computers[j+1].getPrice()){
                    
                        Computer com = computers[j];
                        computers[j] = computers[j+1];
                        computers[j+1] = com;
                        //换数组中元素的位置
                    }
                }
            }
            for(Computer com : computers){
                //注意:System.out.println(com.getDetails());
                listPrice(com);
            }
        public static void listPrice(Computer com){//多态参数
            System.out.println(com.getPrice());
            System.out.println(com.getDetails());//虚拟方法调用
            if(com instanceof PC){
                PC pc = (PC)com;
                pc.hasBox();
            }
            if(com instanceof NotePad){
                NotePad np = (NotePad)com;
                np.isFold();
            }
        }
    

    相关文章

      网友评论

          本文标题:二维数组

          本文链接:https://www.haomeiwen.com/subject/zarjbqtx.html