笔记总结五
01-数组介绍
-
概念 : 数组就是一种容器, 可以存储同种数据类型的多个值.
-
一班 : 100, 90, 100
二班 : 80, 100, 70
int[] arr1 = {100,90,100}; // 求和
int[] arr2 = {80,100,70}; // 求和
02-数组的定义格式
-
数据类型[] 数组名;
int[] arr;
-
数据类型 数组名[];
int arr[];
-
注意 : 这种定义格式, 仅仅只是定义了数组类型的变量, 还没有真正的创建出容器.
03-数组的静态初始化
-
初始化 : 为数组容器开辟空间, 并将数据存入容器的过程.
-
完整格式 :
数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3...};
int[] arr = new int[]{11,22,33};
-
简化格式 :
数据类型[] 数组名 = {元素1, 元素2, 元素3...};
int[] arr = {11,22,33};
-
细节 : 打印数组名的时候, 看到的不是数组元素, 而是数组的地址值.
[I@233ac6f
04-数组的元素访问
-
格式 :
数组名[索引];
-
索引(角标, 下标) : 数组容器中, 每一个位置所对应的编号, 编号从0开始逐个 + 1增长.
System.out.pritnln(arr[0]);
arr[0] = 11;
if(arr[0] % 2 == 0){
}
int sum = arr[0] + 100;
05-数组的遍历操作
-
概念 : 将数组中每一个元素 [ 取出来 ] , 取出来之后可以打印, 求和, 判断...
-
数组中的属性 : 数组名.length
-
动态获取到数组中 [元素的个数 \ 数组的长度]
-
for(int i = 0; i < arr.length; i++){
}
快捷键: 数组名.fori + 回车
06-数组的动态初始化
-
概念 : 在创建数组的时候, 只指定数组的长度, 系统就会分配默认值
-
格式 :
数据类型[] 数组名 = new 数据类型[长度]; int[] arr = new int[3];
-
默认值 :
-
整数 :0
-
小数 : 0.0
-
布尔 : false
-
字符 : '\u0000' ---- unicode字符 --- 空白字符
-
引用数据类型 (类, 数组, 接口) :
-
null
-
-
07-两种初始化的区别和使用场景
-
区别 :
-
静态初始化 : 手动指定元素, 由系统计算出数组的长度
-
动态初始化 : 手动指定长度, 由系统分配默认初始化值
-
-
场景 :
-
静态初始化 : 如果要操作的数据, 已经非常明确了, 直接静态初始化
需求: 计算出一班 : 100, 90, 100 学生的总成绩是多少 int[] arr = {100,90,100};-
动态初始化 : 只明确要存储的元素个数, 不明确具体数值
需求: 产生10个随机数, 并存入数组. Random r = new Ranomd(); int[] arr = new int[10]; for(int i = 0; i < arr.length; i++){ arr[i] = r.nextInt(100) + 1; } -
08-数组的内存图
-
要求 : 请打开ppt, 将内部的流程梳理清楚, 最好跟同桌交流一下.
-
自己画一张
-
09-数组的常见问题
-
数组索引越界异常 ( ArrayIndexOutOfBoundsException ) :
-
原因 : 当访问了不存在的索引
-
-
空指针异常 : ( NullPointerException )
-
原因 : 当一个引用数据类型的变量, 被赋值为null之后, 跟堆内存的指向就被切断了
-
还想去访问堆内存数据, 就会出现空指针异常
-
-
10-二维数组的介绍
-
概念 : 二维数组也是一个容器, 容器中存储的都是一维数组
-
场景 : 如果发现要操作的 [多组] 属于一个整体的话, 就可以考虑使用二维数组进行维护
-
第一季度:22,66,44 第二季度:77,33,88 第三季度:25,45,65 第四季度:11,66,99
-
11-二维数组的静态初始化
-
完整格式 :
数据类型[][] 数组名 = new 数据类型[][]{
{元素1, 元素2, 元素3..},
{元素1, 元素2, 元素3..}
};
int[][] arr = new int[][]{
{11,22,33},
{44,55,66}
};
-
简化格式 :
数据类型[][] 数组名 = {
{元素1, 元素2, 元素3..},
{元素1, 元素2, 元素3..}
};
int[][] arr = {
{11,22,33},
{44,55,66}
};
-
结论 : 二维数组在存储一维数组的时候, 具体存的是一维数组的内存地址
System.out.println(arr[0]); // [I@233ac56 System.out.println(arr[1]); // [I@344ab77 想要访问元素 : System.out.println(arr[1][2]); // 66
12-二维数组的遍历操作
int[][] arr = {
{11,22,33},
{44,55,66}
};
// 遍历二维数组, 获取每一个一维数组
for(int i = 0; i < arr.length; i++){
// arr[i] : 每一个一维数组
// 继续对每一个一维数组变量, 获取具体的元素.
for(int j = 0; j < arr[i].length; j++){
System.out.println(arr[i][j]);
}
}
13-二维数组的动态初始化
-
格式 :
数据类型[][] 数组名 = new 数据类型[m][n]; m : 指定二维数组的长度 n : 指定一维数组的长度 int[][] arr = new int[2][3]; 创建了一个二维数组, 数组名叫arr, 这个二维数组可以存储2个一维数组, 每一个一维数组可以存储3个元素.
14-二维数组的内存图
-
要求 : 请打开ppt, 将内部的流程梳理清楚, 最好跟同桌交流一下.
15-二维数组练习 - 打乱二维数组 - 必掌握
package com.itheima.test;
import java.util.Random;
public class ArrayTest10 {
/*
需求:将一维数组
int[] nums = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
打乱后,存入二维数组中
*/
public static void main(String[] args) {
Random r = new Random();
int[] nums = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
// 打乱一维数组.
for (int i = 0; i < nums.length; i++) {
// i : 0 1 2 3...15
// index : 随机索引
int index = r.nextInt(nums.length);
// nums[i] nums[index]
int temp = nums[i];
nums[i] = nums[index];
nums[index] = temp;
}
// 准备二维数组, 来存储打乱之后的元素.
int[][] datas = new int[4][4];
int index = 0;
// 遍历二维数组, 填充元素
for (int i = 0; i < datas.length; i++) {
for (int j = 0; j < datas[i].length; j++) {
// 差的就是一个变量, 变量最开始为0, 逐个+1
datas[i][j] = nums[index];
index++;
}
}
// 遍历二维数组, 打印查看结果.
for (int i = 0; i < datas.length; i++) {
for (int j = 0; j < datas[i].length; j++) {
System.out.print(datas[i][j] + "\t");
}
System.out.println();
}
}
}
浙公网安备 33010602011771号