java 多维数组

1. 多维数组概述

数组:它是一个线性数据结构,用于存储一组相同数据类型的数据(长度一经定义不可变)。

 需求:存储 1 个班的 5 名同学的成绩。

double[] scores = new double[5];
scores[0] = 90;
// ....

需求进阶:存储 3 个班的各 5 名同学的成绩。

double[] scores1 = new double[5];
double[] scores2 = new double[5];
double[] scores3 = new double[5];
// ...

多维数组:可以理解为是一种嵌套的数组。

常见形式为:二维数组 、三维数组 ...

二维数组: 是以 一维数组 作为 数组元素 的数组,即 “数组的数组”。

2. 多维数组定义

一维数组的语法:

数组元素的数据类型[] 数组名 = new 数组元素的数据类型[数组的容量/长度/元素个数];
数组元素的数据类型[] 数组名 = {元素值1, 元素值2, ...};
数组元素的数据类型[] 数组名 = new 数组元素的数据类型[] {元素值1, 元素值2, ...};

// 例如:存储 5 名同学成绩
double[] scores = new double[5];
double[] scores = {90, 80, 70, 60, 50};
double[] scores = new double[] {90, 80, 70, 60, 50};

// 赋值语法
数组名[下标] = 元素值;

// 例如:存储第 1 名同学的成绩
scores[0] = 90;

从内存分配原理的角度上来看,它们都是一维数组而已,是以 一维数组 作为 数组元素 的数组,即 “数组的数组”。

 二维数组的语法:

  • 二维数组中存储的是一个一维数组,所以就把一维数组这个类型作为二维数组的数组元素的数

    据类型即可。

    数组元素的数据类型[] 数组名 = new 数组元素的数据类型[数组的容量/长度/元素个数];
    数组元素的数据类型[] 数组名 = {元素值1, 元素值2, ...};
    数组元素的数据类型[] 数组名 = new 数组元素的数据类型[] {元素值1, 元素值2, ...};
    
    // 例如:存储 3 个班各 5 名同学成绩
    double[][] scores = new double[3][5]; 
    double[][] scores = {{90, 80, 70, 60, 50}, {...}, {...}};
    double[][] scores = new double[][] {{90, 80, 70, 60, 50}, {...}, {...}};
    
    // 赋值语法
    数组名[外维数组下标][内维数组下标] = 元素值;
    
    // 例如:给第 1 个班存储第 1 名同学的成绩
    scores[0][0] = 90;

 注意:在定义二维数组时,可以省略内维数组容量。

例如:

double[][] scores = new double[3][];
scores[0] = new double[5];
scores[1] = new double[2];
scores[2] = new double[3];

相比于直接在定义时指定好内维数组容量,这种方式更为灵活,内维数组可以指定不同的数组容量。

3. 多维数组的遍历

使用单重循环解决了一维数组的遍历。

使用多重循环解决多维数组的遍历。

// 存储 3 个班各 5 名同学成绩
double[][] scores = new double[3][5];

Scanner input = new Scanner(System.in);
for (int i = 0; i < scores.length; i++) {
    System.out.printf("请输入第%d个班的同学成绩:\n", i+1);
    for (int j = 0; j < scores[i].length; j++) {
        System.out.printf("请输入%d班的第%d名同学成绩:", i+1, j+1);
        scores[i][j] = input.nextDouble();
    }
}

System.out.println();

// 遍历
for (int i = 0; i < scores.length; i++) {
    System.out.printf("第%d个班的同学成绩列表如下:\n", i+1);
    for (int j = 0; j < scores[i].length; j++) {
        System.out.println(scores[i][j]);
    }
}

4. 多维数组的使用

参照上课代码

5. 算法概述

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量

食谱就是一个算法,我们就此有了“算法”概念的初步定义:一个算法是解决一个问题的进程。

 6. 排序算法

所谓排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。这种新序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于筛选和计算,大大提高了计算效率。对于排序,我们首先要求其具有一定的稳定性,即当两个相同的元素同时出现于某个序列之中,则经过一定的排序算法之后,两者在排序前后的相对位置不发生变化。换言之,即便是两个完全相同的元素,它们在排序过程中也是各有区别的,不允许混淆不清。

排序算法也有很多种解决思路,常见的有:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序、基数排序等。  

6.1 冒泡排序

它重复地走访过要排序的元素列,依次比较两个相邻的元素如果顺序 (如从大到小、首字母从Z到A)错误就把他们交换过来 。(相邻元素做比较,两两比较小靠前)  

例如:9, 7, 8, 6, 2,做好升序排序。

冒泡排序:外层循环 n-1,内层循环 n-1-i

6.2 选择排序

类似于打擂台求最小值的思路。

6.3 插入排序

类似于在一个已有序列中,去比较、插入新数据,并保持现有序列。

7. 引用数据类型

Java 中有 8 个【基本】数据类型:

数值:

  • 整数:byte、short、int、long

  • 浮点数:float、double

非数值:

  • char

  • boolean

引用数据类型:

  • 数组

  • 类(String是一个类,....)

  • 接口

  • 枚举

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值