Java基础之数组Arrays

本文详细介绍了Java中的数组,包括定义、声明、创建、赋值和遍历,强调了Arrays类的使用,如排序和输出数组内容。还探讨了二维数组的概念及其操作方法,包括声明、分配空间和赋值。最后通过实例展示了数组在实际应用中的场景,如猜数游戏、求最大值和排序等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、数组的定义

二、数组的声明、创建及赋值

三、遍历数组

四、数组的应用

五、Arrays类

六、二维数组


一、数组的定义

 数组:存储数据的空间(装数据的容器),数组中可以装多个相同类型的数据。

 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。

二、数组的声明、创建及赋值

  • 声明数组:数据类型[ ]  数组名;    或者    数据类型  数组名[ ];

       

  • 数组创建:数组的长度是固定不变的,你需要告诉数组能存储多少个元素,也就是分配空间。
  • 数组名=new  数据类型[数组长度];
  •  赋值:将数据存储到数组中。
  • 数组名[下标]=数据;

 注意:若数组声明好并分配空间后,如果没有进行赋值操作,数组会给每一个元素一个默认值。

整数类型的数组元素默认值为0;浮点数类型的数组元素默认值为0.0;字符型数组元素默认值为空格;布尔类型的数组元素默认值为false;字符串类型数组元素默认值为null。

  • 声明数组和分配空间合并写:

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

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

以上两种形式都可以,看个人习惯。

  • 声明数组、分配空间、赋值合并写:

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

以上可简写为:

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

三、遍历数组

数组名.length可以获取数组长度。

输出所有元素,这个操作称之为遍历数组。一般用两种方法:

  • 利用for循环

        int[] nums = { 11, 25, 79, 63, 45, 31, 10, 25, 79, 99, 43, 68, 13, 44,
                77, 66, 82, 106, 352, 78, 194, 56, 78, 96, 45, 54, 69, 77 };

        // 获取数组长度(得到数组中元素的个数) -->数组名.length
        int length = nums.length;
        System.out.println("nums数组中元素个数:" + length);

        //输出数组中所有的元素
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i] + " ");
        }
        
        System.out.println();

  • 增强for循环

语法结构:
                  for(数据类型 变量名 : 数组名){
                      操作变量名这个变量
                  }
                  -->数据类型就是你要操作的数组的类型,
                 -->变量名是复合变量命名规则的变量,
                 -->数组名是你要操作的数组名称
              执行规律:
                  将你要操作的数组中的元素按照下标顺序依次取出来存储在变量中,这时候你操作变量,就是操作数组中的数据。

for(int a : nums){
            System.out.print(a+" ");
        }

四、数组的应用

  • 猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数。

        Scanner sc = new Scanner(System.in);
        
        System.out.println("请输入你要猜测的数据:");
        int guess =sc.nextInt();
        
        //定义一个变量用来统计比较次数,如果比较到数组中的最后一个元素,说明数组中没有你猜测的数据
        int count = 0;
        for (int i = 0; i < nums.length; i++) {
            if(guess==nums[i]){
                System.out.println("你猜测的数据在数组中存在,下标为:"+i);
                break;
            }else{
                count++;
            }
        }
        
        if(count==nums.length){
            System.out.println("你猜测的数据不在数组中");
        }

  • 求数组中元素的最大值

 从键盘输入本次Java考试五位学生的成绩。存储在数组中,求考试成绩最高分
      
        Scanner sc = new Scanner(System.in);
        
    准备一个长度为5的double类型的数组用来存储5个学生的Java考试成绩
        double[] scores = new double[5];
        
        通过循环和键盘录入获得5个学生的成金并存储在数组中
        for (int i = 0; i < scores.length; i++) {
            System.out.println("请输入第"+(i+1)+"个学生的成绩:");
            scores[i]=sc.nextDouble();
        }
        
        遍历一下数组
        System.out.println("学生成绩分别是:");
        for (double d : scores) {
            System.out.print(d+" " );
        }
        System.out.println();
        
        假设数组中的第一个元素为最大值
        double max = scores[0];
        
        使用循环来实现max和每个元素之间的比较,每当有元素比max大,就会把值赋给max,然后接着和下一个元素比较,直到和数组中最后一个元素比较完就能得到最大值
        for (int i = 0; i < scores.length; i++) {
            if(scores[i]>max){
                max = scores[i];
            }
        }
        
        System.out.println("5个学生中最高成绩为:"+max);

  • 在数组中插入一个数据,并保持降序

数组长度一旦固定好以后,是不能修改,这时候,你要插入一个学员成绩,是无法插入的,你只能新建一个长度比原来数组长度大1的数组
          1)新建一个长度比原来数组大1的数组 
          2)将原来数组中的元素存储到这个新的数组中 
          3)获取你要插入的数据
          4)获取插入元素要插入的位置(下标),通过循环比较插入的数据与数组中元素得到
          5)从插入位置开始及之后的元素依次往后移动一个位置,空出插入位置,存储插入的元素,移动需要从最后一个位置开始操作
          6)将插入的元素存储到插入位置,并保持降序

有一组学员的成绩{99,85,82,63, 60},将它们按降序排列。要增加一个学员的成绩,将它插入成绩序列,并保持降序

// 创建Scanner类对象,用于输入你要插入的数据
        Scanner sc = new Scanner(System.in);

        // 原来的成绩数组
        int[] scores = { 99, 85, 82, 63, 60 };

        // 1)新建一个长度比原来数组大1的数组
        int[] newScores = new int[scores.length + 1];
        // 2)将原来数组中的元素存储到这个新的数组中

        for (int i = 0; i < scores.length; i++) {
            newScores[i] = scores[i];
        }

        // 遍历数组
        System.out.println("插入成绩之前:");
        for (int i : newScores) {
            System.out.print(i + " ");
        }
        System.out.println();

        // 3)获取你要插入的数据
        System.out.println("请输入你要插入的成绩:");
        int insert = sc.nextInt();

        // 4)获取插入元素要插入的位置(下标)
        int index = newScores.length-1;
        for (int i = 0; i < newScores.length; i++) {
            // 如果插入的元素比数组中的元素大,表面插入元素要存储在该位置
            if (insert > newScores[i]) {
                index = i;
                // 一旦得到插入数据比数组中元素大,就结束后续比较,退出循环
                break;
            }
        }

        // 5)从插入位置开始及之后的元素依次往后移动一个位置
        for (int i = newScores.length - 1; i > index; i--) {
            newScores[i] = newScores[i - 1];
        }

        // 6)将插入的元素存储到插入位置
        newScores[index] = insert;

        // 遍历数组
        System.out.println("插入成绩之后:");
        for (int i : newScores) {
            System.out.print(i + " ");
        }
        System.out.println();

  •  使用冒泡排序对数组进行升序或者降序排序

int[] nums = {11,25,96,46,78,32,18,64};
        System.out.println("数组排序前:");
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i]+" ");
        }
        System.out.println();
        
        
        //外层循环控制比较的轮数(以前讲的行数)
        for(int i =0;i<nums.length-1;i++){
            //内层循环控制每一轮的比较次数(以前讲的列数)
            for(int j = 0;j<nums.length-1-i;j++){
                //比较相邻的两个元素,如果前面的元素比后面的元素大,交换位置
                if(nums[j]>nums[j+1]){
                    int templ = nums[j];
                    nums[j]=nums[j+1];
                    nums[j+1]=templ;
                }
            }
        }
        
        System.out.println("数组排序后:");
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i]+" ");
        }
        System.out.println();

五、Arrays类

Arrays类:专门用来操作数组的类,这个类中提供了许多操作数组的方法

  • 使用Arrays.sort(数组名)对数组进行升序排序
  • 使用Arrays.toString(数组名)输出数组
  • Arrays.equals(数组名1,数组名2):比较两个数组中的元素是否一样,如果是一样(要求两个数组中的对应下标上的元素值相同,数组长度一样),返回true,否则返回false
  • Arrays.fill(数组名,数据):将数组中的所有元素值替换为你指定的数据
  • copyOf(array,length):把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致
  • int binarySearch(array, val)查询元素值val在数组array中的下标(要求数组中元素已经按升序排列),如果数组中没有你要查找的元素,返回一个负值
  •  int[] copyOfRange(int[] original, int from, int to) 将指定数组的指定范围复制到一个新数组。 复制的范围包括开始索引,不包括结束索引

六、二维数组

二维数组的声明 数据类型[ ][ ] 数组名; 或者 数据类型 数组名[ ][ ];

分配空间:告诉数组里面的元素个数 数组名 = new 数据类型[长度][长度]; 或者 数组名 = new 数据类型[数组长度][  ];

赋值:将数据存储在数组中 数组名[下标][下标]

二维数组的声明和分配空间合并写   数据类型[ ][ ] 数组名 = new 数据类型[长度][长度]; 或者 数据类型[ ][ ] 数组名 = new 数据类型[长度][ ];

二维数组的声明、分配空间、赋值、合并写
       数据类型[ ][ ] 数组名 = new 数据类型[ ][ ]{{数据1,数据2,...,数据n},{数据1,数据2,...,数据n},...,{数据1,数据2,...,数据n}};

 二维数组声明、分配空间、赋值的简写方式
         数据类型[][] 数组名={{数据1,数据2,...,数据n},{数据1,数据2,...,数据n},...,{数据1,数据2,...,数据n}};

  • 二维数组的遍历

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

        for (int i = 0; i < nums.length; i++) {
            for(int j =0;j<nums[i].length;j++){
                System.out.print(nums[i][j]+" ");
            }
            //换行
            System.out.println();
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值