第七章:二维数组

第七章:多维数组

一,为什么学习多维数组

场景:

要求对5个班各5名学生某门课程的成绩进行各种操作,如何实现?

分析:

  • 1个班5名学生成绩
    长度为5的一维数组

  • 5个班5名学生成绩
    5个长度为5的一维数组?

  • n个班n名学生成绩

    n个长度为n的一维数组?

​ 当我们的数据有二个维度的时候,我们在用一维数组就会遇到单个变量和一维数组一样的问题,我们要定义很多的一维数组去解决。那么这个时候,我们就需要多维数组了。

  • 三维及以上的数组很少使用
  • 主要使用二维数组
  • 从语法上Java支持多维数组
  • 从内存分配原理的角度讲,只有一维数组

二,二维数组

​ 二维数组的定义赋值都和一维数组基本一样。

定义and分配空间

语法:

<数据类型> [][] 数组名;

<数据类型> 数组名 [][];

int [ ][ ] scores;   //定义二维数组
scores=new int[5][50];  //分配内存空间
//或者
int [ ][ ] scores = new int[5][50];

注意:

定义二维数组时,要定义最大维数.

int [ ][ ] scores = new int[][5];//×
int [ ][ ] scores = new int[5][];//√
int [ ][ ] scores = new int[5][5];//√
赋值:

在这里插入图片描述

三,二维数组与内存

​ 二维数组其实在内存中存储是以一维数组的方式存储,每一个类似于s[0],s[1]…都是一个一维数组。
在这里插入图片描述
在这里插入图片描述

四,冒泡排序(补充)

​ 冒泡排序其实在C语言比较底层的语言中会写的比较多,而java是很少用这种的,因为java为我们准备了工具类Util包。

​ 我们如果想把一个一维数组的数字排序,那么我们应该怎么做呢?

分析:

  • 每次比较相邻两数
  • 小的交换到前面
  • 每轮结束后最大的数交换到最后

​ 那么我们就的用到双重for循环

实现想法:

用二重循环将5个数字升序排序:

  • 5个数字如何存放
    数组,数组.length = 5
  • 控制比较多少轮
    外层循环,循环变量 i
  • 控制每轮比较多少次
    内层循环,循环变量 j
  • 交换数据
public class NoKris {
    public static void main(String[] args) {
        //冒泡排序算法
        int[] numbers=new int[]{1,6,10,12,3};
        //需进行length-1次冒泡
        for(int i=0;i<numbers.length-1;i++)//控制比较多少轮
        {
            for(int j=0;j<numbers.length-1-i;j++)//控制每轮比较多少次
            {
                if(numbers[j]>numbers[j+1])//交换条件
                {
                    //交换
                    int temp=numbers[j];
                    numbers[j]=numbers[j+1];
                    numbers[j+1]=temp;
                }
            }
        }
        System.out.println("从小到大排序后的结果是:");
        for(int i=0;i<numbers.length;i++)//输出排序后的数组
            System.out.print(numbers[i]+" ");
    }
冒泡排序小结

在这里插入图片描述

五,Arrays工具类

​ 上面提到了java拥有工具类,所以讲一下Arrays。

​ 了解java.util.Arrays类:

  • java.util包提供的工具类
  • Arrays类提供操作数组的方法,如:排序、查询
  • Arrays类的sort()方法: 对数组进行升序排列

我们刚才写的冒泡排序那么多代码,我们只需要一个Arrays.sort(数组名);就可以实现了。

Arrays类不止有这一个方法,还有其他的好用的方法。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值