Arrays类与二维数组

一、Arrays类

除了上一篇文章提到的几种Arrays方法,Arrays类还有其他方法。

1.Arrays.copyOf(array,length)

把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致。

        int[] nums = {11,25,69,86,76,34};

        int[] newnums1=Arrays.copyOf(nums, 3);
        System.out.println(Arrays.toString(newnums1));
        
        int[] newnums2=Arrays.copyOf(nums, 6);
        System.out.println(Arrays.toString(newnums2));
        
        int[] newnums3=Arrays.copyOf(nums, 8);
        System.out.println(Arrays.toString(newnums3));

结果:

[11, 25, 69]
[11, 25, 69, 86, 76, 34]
[11, 25, 69, 86, 76, 34, 0, 0]

2.Arrays.binarySearch(array, val)

查询元素值val在数组array中的下标(要求数组中元素已经按升序排列),如果数组中没有你要查找的元素,返回一个负值。

public static void main(String[] args) {
        
        int[] nums = {11,25,63,11,25,45,96,63};
        
        Arrays.sort(nums);
        
        System.out.println(Arrays.toString(nums));


        int index =Arrays.binarySearch(nums, 630);


        System.out.println("25在数组中的下标为:"+index);

    }

结果:

[11, 11, 25, 25, 45, 63, 63, 96]
25在数组中的下标为:-9

3.Arrays.copyOfRange(int[] original, int from, int to) 将指定数组的指定范围复制到一个新数组。 复制的范围包括开始索引,不包括结束索引

public static void main(String[] args) {
        int[] nums = {11,25,69,78,46,12,13,66,88,99,40};
                     
        int[] newNums =Arrays.copyOfRange(nums, 3, 7);

        System.out.println(Arrays.toString(newNums));
    }

结果:

[78, 46, 12, 13]

二、二维数组

多维数组:也就是数组的嵌套,即一个数组中包含一个或者多个数组。

1.二维数组的声明 

数据类型[][] 数组名; 或者 数据类型 数组名[][];

        byte[][] bytes;
        short[][] shorts;
        int[][] nums;
        String[][] strs;

 2.分配空间:告诉数组里面的元素个数

数组名 = new 数据类型[长度][长度]; 或者 数组名 = new 数据类型[数组长度][];


        // nums数组中有4个元素,这4个元素都是一个一维数组,并且这4个一维数组的长度都为3
        nums = new int[4][3];

        // strs数组中有3个元素,这3个元素都是一维数组,这3个一维数组的长度可能不相同
        strs = new String[3][];

        // 赋值:将数据存储在数组中 数组名[下标][下标]
        nums[0][0] = 10;
        nums[0][1] = 23;
        nums[0][2] = 33;

        nums[1][0] = 20;
        nums[1][1] = 33;
        nums[1][2] = 13;

        nums[2][0] = 40;
        nums[2][1] = 13;
        nums[2][2] = 73;

        nums[3][0] = 10;
        nums[3][1] = 83;
        nums[3][2] = 45;
        // nums数组中每个元素(一维数组)的长度为3,下标范围0-2.下标为3,超出范围,报数组下表越界异常
        // nums[3][3] = 77;

        System.out.println(nums[3][2]);

3.操作数组中的元素 数组名[下标][下标]


        nums[3][2]+=20;// nums[3][2]=nums[3][2]+20;
        System.out.println(nums[3][2]);

4.二维数组的声明和分配空间合并写

  数据类型[][] 数组名 = new 数据类型[长度][长度]; 或者 数据类型[][] 数组名 = new 数据类型[长度][];
        
        //声明一个长度为2的二维数组,这个二维数组的元素还是一个数组,每个数组的长度是4
        int[][] nums = new int[2][4];
        
        //声明一个长度为3的二维数组,这个二位数的元素还是一维数组,每个一维数组的长度不确定
        char[][] chars = new char[3][];
        
        


5.二维数组的声明、分配空间、赋值、合并写


       数据类型[][] 数组名 = new 数据类型[][]{{数据1,数据2,...,数据n},{数据1,数据2,...,数据n},...,{数据1,数据2,...,数据n}};


        double[][] doubles = new double[][]{{12.5,45.8},{23.4,56.1,58.3}};

6.二维数组声明、分配空间、赋值的简写方式


         数据类型[][] 数组名={{数据1,数据2,...,数据n},{数据1,数据2,...,数据n},...,{数据1,数据2,...,数据n}};

        int[][] nums = {{11,25,36},{44,66},{1,2,3,8,9,45}};

7.二维数组的遍历


        int[][] nums = { { 11, 23, 45 }, { 25, 36 },
                { 55, 66, 44, 78, 95, 123, 68 }, { 100 } };

        for (int i = 0; i < nums.length; i++) {
            // System.out.println(nums[i]);
            //因为nums是一个二维数组,nums[i]表示的是nums数组中的元素,而这个元素还是一个一维数组,所以需要继续对nums[i]进行遍历
            for(int j =0;j<nums[i].length;j++){
                System.out.print(nums[i][j]+" ");
            }
            //换行
            System.out.println();
        }

示例:

public static void main(String[] args) {
        // 已知有3个班级各5名学员,请使用二维数组计算各个班级的总成绩

        // 创建Scanner类对象
        Scanner sc = new Scanner(System.in);

        // 准备一个长度为3的二维数组,存储学生成绩
        double[][] scores = new double[3][5];

        // 通过循环向scores数组中赋值
        for (int i = 0; i < scores.length; i++) {
            System.out.println("*************第" + (i + 1) + "个班*************");
            for (int j = 0; j < scores[i].length; j++) {
                System.out.println("请输入第" + (j + 1) + "个学生成绩:");
                scores[i][j] = sc.nextDouble();
            }
        }

        // 遍历输出二维数组中的元素
        for (int i = 0; i < scores.length; i++) {
            System.out.print("第" + (i + 1) + "个班学生成绩:");
            for (int j = 0; j < scores[i].length; j++) {
                System.out.print(scores[i][j] + " ");
            }
            System.out.println();
        }

        //定义一个变量来存储所有学生成绩之和
        double allSum = 0;
        
        
        for (int i = 0; i < scores.length; i++) {
            // 计算每个班的成绩之和
            double sum = 0;
            System.out.print("第" + (i + 1) + "个班总成绩:");
            for (int j = 0; j < scores[i].length; j++) {
                sum += scores[i][j];
                allSum+=scores[i][j];
            }
            System.out.println(sum);
        }
        
        System.out.println("所有学生成绩值之和:"+allSum);

    }
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豪仔思密达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值