第七章:多维数组
一,为什么学习多维数组
场景:
要求对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类不止有这一个方法,还有其他的好用的方法。