回顾与重点
模块四回顾
-
Scanner:键盘录入
a.导包:
import java.util.Scanner
b.创建对象:
Scanner 变量名 = new Scanner(System.in)
c.调用方法,实现键盘录入
变量名.nextInt() 录入一个整数
变量名.next() 录入字符串,遇到空格或者回车就结束录入
变量名.nextLine() 录入字符串,遇到回车就结束录入
-
Random:生成随机数
a.概述:java定义好的类
b.作用:在指定的范围内随机一个整数
c.使用:
导包:
import java.util.Random
创建对象:
Random变量名 = new Random()
调用方法:
变量名.nextInt() 在int范围内随机一个整数
变量名.nextInt(int bound) → 在0—(bound-1)之间随机
-
switch:
a.格式:
switch(变量) { case 常量值1: 执行语句1; break; case 常量值2: 执行语句2; break; case 常量值3: 执行语句2; break; ... default: 执行语句n; break; }
b. 执行流程:用变量代表的值去精准匹配,匹配上哪个case就走哪个case对应的执行语句,如果都匹配不上,就走default对应的执行语句n
c.没有break,会出现case的穿透性,一直穿透,直到遇到break或者switch代码结束为止
-
if:
a.格式:
if(boolean表达式) { 执行语句 }
b.执行流程:先走if后面的boolean表达式,如果是true,就走if后面的执行语句,否则就不走
-
if…else:
a.格式:
if(boolean表达式) { 执行语句1 } else { 执行语句2 }
b.执行流程:先走if后面的boolean表达式,如果是true,就走if后面的执行语句1,否者就走else后面的执行语句2
-
else…if:
a.格式:
if(boolean表达式) { 执行语句1 } else if(boolean表达式) { 执行语句2 } else if(boolean表达式) { 执行语句3 } ... else { 执行语句n }
b.执行流程:从上往下挨个判断,哪个条件为true,就走哪个if对应的执行语句,以上所有的判断都不成立,就走else对应的执行语句n。
-
for循环:
a.格式:
for(初始化变量;比较;步进表达式){ 循环语句 }
b.执行流程:先初始化变量,比较,如果是true,就走循环语句,再走步进表达式;继续比较,如果还是true,继续走循环,再走步进表达式;再比较,直到比较为false,循环结束。
-
while循环:
a.格式:
初始化变量; while(比较) { 循环语句; 步进表达式; }
b.执行流程:先初始化变量,比较,如果是true,就走循环语句,再走步进表达式;继续比较,如果还是true,继续循环,再走步进表达式;再比较,直到比较为false,循环结束。
-
do…while循环:
a.格式:
初始化变量; do { 循环语句; 步进表达式; } while(比较)
b.执行流程:初始化变量;循环语句;步进表达式;比较,如果是true,继续走步进表达式,直到比较为false,循环结束。
c.特点:至少循环一次。
-
循环控制语句:
a. break:结束循环
b. continue:结束本次循环,进入下一次循环
-
死循环:比较永远是true
-
嵌套循环:
先走外层循环,再走内层循环,内层循环就一直循环,直到内层循环结束,外层循环进入下一次循环,直到连外层循环都结束了,整体结束。
模块五重点
- 数组的特点以及定义
- 数组的操作(存数据,取数据,遍历数据)
- 二维数组(定义,存,取,遍历)
- 知道内存中的:堆,栈
第一章 数组的概述及定义
1.1 数组的概述
-
问题:如果我们想存储一个数据,我们可以使用变量,但是变量一次只能存储一个数据,所以我们想能不能一次存储多个数据
-
数组的概述:是一个容器,数组本身属于引用数据类型
-
作用:一次存储多个数据
-
特点:
a. 既可以存储基本类型的数据,还能存储引用类型的数据;
b.定长(定义数组时,长度为多长,最多能存多少个数据),同时也是缺点。
1.2 数组的定义
-
定义:
a. 动态初始化:定义数组的时候,我们没有给具体的数据,只指定了长度
数据类型[] 数组名 = new 数据类型[长度] 或者 数据类型 数组名[] = new 数据类型[长度]
各部分解释:
等号左边的数据类型:规定了数组中只能存储什么类型的数据
[]:代表的是数组,一个 [] 代表一维数组,两个[] [] 代表二维数组
数组名:自己取的名字,遵循小驼峰式
new:代表的是创建数组
等号右边的数据类型:要和等号左边的数据类型一致
[长度]:指定数组长度,规定了数组中最多能存多少个数据
public class Demo01Array { public static void main(String[] args) { // 动态初始化 int [] arr1 = new int[3]; String[] arr2 = new String[3]; } }
b.静态初始化:在定义数组的时候,我们直接给了数据
数据类型[] 数组名 = new 数据类型[]{元素1, 元素2,...} → 不推荐使用 或者 数据类型 数组名[] = new 数据类型[]{元素1, 元素2,...} → 不推荐使用
c.简化的静态初始化:
数据类型[] 数组名 = {元素1, 元素2,...} → 推荐使用
public class Demo01Array { public static void main(String[] args) { // 动态初始化 int [] arr1 = new int[3]; String[] arr2 = new String[3]; // 静态初始化 → 简化 int[] arr3 = {1,2,3,4}; String[] arr4 = {"东方不败", "林平之", "岳不群"}; // 静态初始化 → 非简化 int[] arr5 = new int[] {1,2,3,4}; String[] arr6 = new String[] {"东方不败", "林平之", "岳不群"}; } }
-
动态初始化和静态初始化的区别:
a.动态初始化:定义的时候只能指定长度,没有存具体的数据;当只知道长度,但不知道具体存啥数据的时候,可以使用动态初始化;
b.静态初始化:定义的时候就直接知道存什么数据
第二章 数组操作
2.1 获取数组长度
-
格式:
数组名.length
-
注意:length后面不要带小括号,因为length不是数组中的一个方法,而是数组中的一个属性
public class Demo02Array { public static void main(String[] args) { String[] arr1 = {"迪迦奥特曼", "猫和老鼠", "花园宝宝", "海绵宝宝", "圣斗士", "百变小樱魔术卡"}; int length = arr1.length; System.out.println("length = " + length);// length = 6 } }
2.2 索引的介绍
-
概述:元素在数组中存储的位置(编号,下标)
-
特点:
a. 索引唯一
b. 索引都是从 0 开始的,最大索引都是数组长度 - 1.
-
索引的作用:
我们将来操作元素,必须通过索引来操作(存数组、取数据、查数组等都要指定索引)。
2.3 存储元素
-
格式:
数组名[索引值] = 值 → 将等号右边的数据放到数组指定的索引位置上
public class Demo03Array { public static void main(String[] args) { // 定义一个数组 int[] arr = new int[3]; arr[0] = 100; // 将100存到了arr这个数组的0索引上 arr[1] = 200; // 将200存到了arr这个数组的1索引上 arr[2] = 300; // 将300存到了arr这个数组的2索引上 // arr[3] = 400; // 上面的数组长度为3,最大索引为2,没有3索引,所以不能操作不存在的索引 System.out.println("======================="); String[] arr2 = new String[3]; arr2[0] = "张三"; arr2[1] = "李四"; arr2[2] = "王五"; System.out.println("======================="); } }
public class Demo04Array { public static void main(String[] args) { // 定义数组,长度为3 int[] arr = new int[3]; // 创建 Scanner 对象 Scanner sc = new Scanner(System.in); // 键盘录入,将数据存到数组中 /*arr[0] = sc.nextInt(); arr[1] = sc.nextInt(); arr[2] = sc.nextInt();*/ // 使用循环录入,数组长度是多少,我们就循环多少次 for (int i = 0; i < arr.length; i++) { arr[i] = sc.nextInt(); } } }
public class Demo05Array { public static void main(String[] args) { // 定义数组,长度为3 int[] arr = new int[3]; // 创建 Random 对象 Random rd = new Random(); // 键盘录入,将数据存到数组中 /*arr[0] = rd.nextInt(10); arr[1] = rd.nextInt(10); arr[2] = rd.nextInt(10);*/ // 使用循环录入,数组长度是多少,我们就循环多少次 for (int i = 0; i < arr.length; i++) { arr[i] = rd.nextInt(10); } } }
2.4 获取元素
-
格式:
数组名[索引值]
-
细节说明:
a. 直接输出数组名,会输出数组在内存中的地址值;
b. 地址值:数组在内存中的一个身份证号,唯一标识,我们可以通过这个唯一标识到内存中找到这个数组,从而操作这个数组中的数据;
c. 如果数组中没有存数据,那么直接获取也能获取出来一些数据(元素的默认值);
整数:0
小数:0.0
字符:‘\u0000’ → 对应的int值是0
布尔:false
引用:null
public class Demo06Array { public static void main(String[] args) { // 定义数组,长度为3 int[] arr = new int[3]; System.out.println(arr); // [I@4eec7777 System.out.println(arr[0]); // 0 System.out.println(arr[1]); // 0 System.out.println(arr[2]); // 0 } }
2.5 遍历元素
1.遍历:将元素从数组中一个一个的获取出来。
public class Demo07Array {
public static void main(String[] args) {
// 定义数组,长度为3
int[] arr = new int[3];
System.out.println(arr); // 地址值
System.out.println(arr[0]); // 默认值0
System.out.println(arr[1]); // 默认值0
System.out.println(arr[2]); // 默认值0
// 存数据
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
System.out.println(arr[0]); // 100
System.out.println(arr[1]); // 200
System.out.println(arr[2]); // 300
System.out.println("=====================");
String[] arr1 = new String[3];
System.out.println(arr1); // 地址值
System.out.println(arr1[0]); // 默认值 null
System.out.println(arr1[1]); // 默认值 null
System.out.println(arr1[2]); // 默认值 null
// 存数据
arr1[0] = "张无忌";
arr1[1] = "张三丰";
arr1[2] = "张翠山";
System.out.println(arr1[0]); // 默认值 null
System.out.println(arr1[1]); // 默认值 null
System.out.println(arr1[2]); // 默认值 null
System.out.println("==========遍历数组arr===========");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("==========遍历数组arr1===========");
/*
快捷键:数组名.fori
*/
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
}
}
快捷键:
数组名.fori
第三章 操作数组时两个常见的问题
3.1 数组索引越界异常——ArrayIndexOutOfBoundsException
-
原因:操作的索引超出了数组索引范围了
public class Demo08Array { public static void main(String[] args) { int[] arr = new int[3]; arr[0] = 100; arr[1] = 200; arr[1] = 300; // arr[3] = 400; // 索引3超出了arr的索引范围 // arr[-1] = 400; // 索引-1超出了arr的索引范围 for (int i = 0; i <= arr.length; i++) { System.out.println(arr[i]); // 当i等于3时,索引3超出了arr的索引范围 } } }
3.2 空指针异常——NullPinterException
-
原因:当一个对象为 null时,在调用此对象的其他
public class Demo09Array { public static void main(String[] args) { int[] arr = new int[3]; System.out.println(arr.length); arr = null; System.out.println(arr.length); // NullPointerException } }
以上两个问题,我们只需要知道原因
第四章 数组练习
4.1 需求:求出数组中的元素最大值
步骤:
a. 定义一个max,接收两个元素比较之后的较大值
b. 遍历数组,将每一个元素获取出来进行比较
c. 判断,如果max小于遍历出来的元素,证明遍历出来的元素大,就将大的重新赋值给max
d. 直接输出max
public class Demo01GetMax {
public static void main(String[] args) {
/*
需求:求出数组中的元素最大值
步骤:
a. 定义一个max,接收两个元素比较之后的较大值
b. 遍历数组,将每一个元素获取出来进行比较
c. 判断,如果max小于遍历出来的元素,证明遍历出来的元素大,就将大的重新赋值给max
d. 直接输出max
*/
int[] arr = {4, 1, 2, 6, 5};
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
// max = max > arr[i] ? max : arr[i];
if(max<arr[i]) {
max = arr[i];
}
}
System.out.println("max = " + max);
}
}
4.2 随机产生10个[0-100]之间整数,统计既是3又是5,但不是7的倍数的个数
步骤:
a. 创建Random对象,用于生成随机数
b.定义一个数组,长度为10
c.定义一个变量 count,用于统计符合条件的数据个数
d.遍历数组,判断元素是否符合指定条件,如果符合,count++
e.输出count
public class Demo02Count {
public static void main(String[] args) {
/*
随机产生10个[0-100]之间整数,统计既是3又是5,但不是7的倍数的个数
步骤:
a. 创建Random对象,用于生成随机数
b.定义一个数组,长度为10
c.定义一个变量 count,用于统计符合条件的数据个数
d.遍历数组,判断元素是否符合指定条件,如果符合,count++
e.输出count
*/
// 1.创建Random对象,用于生成随机数
Random rd = new Random();
// 2.定义一个数组,长度为10
int[] arr = new int[10];
// 3.定义一个变量 count,用于统计符合条件的数据个数
int count = 0;
// 遍历数组,给数组赋值随机数
for (int i = 0; i < arr.length; i++) {
arr[i] = rd.nextInt(101);
}
// 4.遍历数组,判断元素是否符合指定条件,如果符合,count++
for (int i = 0; i < arr.length; i++) {
if (arr[i]%3==0 && arr[i]%5==0 && arr[i]%7 != 0) {
count++;
}
}
// 5.输出count
System.out.println("count = " + count);
}
}
4.3 定义一个数组 int[] arr = {1,2,3,4},遍历数组,输出元素按照[1,2,3,4]
public class Demo03Print {
public static void main(String[] args) {
/*
定义一个数组 int[] arr = {1,2,3,4},遍历数组,输出元素按照[1,2,3,4]
*/
int[] arr = {1, 2, 3 ,4};
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length -1) {
System.out.print(arr[i]+"]");
} else {
System.out.print(arr[i]+",");
}
}
}
}
4.4 需求:随机50个1-100之间的整数,统计偶数个数
步骤:
a. 创建Random对象,用于生成随机数
b. 定义长度为 50的数组
c. 随机50个存储到数组中
d. 定义变量 count,用于统计
e. 遍历数组,判断,如果是偶数,count++
f. 输出count
public class Demo04Count {
public static void main(String[] args) {
/*
需求:随机50个1-100之间的整数,统计偶数个数
步骤:
a. 创建Random对象,用于生成随机数
b. 定义长度为 50的数组
c. 随机50个存储到数组中
d. 定义变量 count,用于统计
e. 遍历数组,判断,如果是偶数,count++
f. 输出count
*/
// 1. 创建Random对象,用于生成随机数
Random rd = new Random();
// 2. 定义长度为 50的数组
int[] arr = new int[50];
// 3.随机50个存储到数组中
for (int i = 0; i < arr.length; i++) {
arr[i] = rd.nextInt(99) + 1;
}
// 4.定义变量 count,用于统计
int count = 0;
// 5. 遍历数组,判断,如果是偶数,count++
for (int i = 0; i < arr.length; i++) {
if (arr[i]%2==0) {
count++;
}
}
// 6. 输出count
System.out.println("count = " + count);
}
}
4.5 键盘录入一个整数,找出整数在数组中存储的索引位置
步骤:
a. 创建Scanner对象
b. 定义数组,随便存几个数据
c. 遍历数组,在遍历的过程中,判断是否和录入的数相等,如果相等,输出索引
public class Demo05Search {
public static void main(String[] args) {
/*
键盘录入一个整数,找出整数在数组中存储的索引位置
步骤:
a. 创建Scanner对象
b. 定义数组,随便存几个数据
c. 遍历数组,在遍历的过程中,判断是否和录入的数相等,如果相等,输出索引
*/
// 1. 创建Scanner对象
Scanner sc = new Scanner(System.in);
// 2. 定义数组,随便存几个数据
int[] arr = {5,6,8,2,9};
System.out.println("请输入搜索的数");
int data = sc.nextInt();
// 3.遍历数组,在遍历的过程中,判断是否和录入的数相等,如果相等,输出索引
for (int i = 0; i < arr.length; i++) {
if (data == arr[i]) {
System.out.println("i = " + i);
}
}
}
}
问题升级:如果查不到,输出-1,代表没有查到
public class Demo05Search {
public static void main(String[] args) {
/*
键盘录入一个整数,找出整数在数组中存储的索引位置
步骤:
a. 创建Scanner对象
b. 定义数组,随便存几个数据
c. 遍历数组,在遍历的过程中,判断是否和录入的数相等,如果相等,输出索引
*/
// 1. 创建Scanner对象
Scanner sc = new Scanner(System.in);
// 2. 定义数组,随便存几个数据
int[] arr = {5,6,8,2,9};
System.out.println("请输入搜索的数");
int data = sc.nextInt();
// 定义一个变量,此变量用来表示是否有要查找的数据
int flag = 0;
// 3.遍历数组,在遍历的过程中,判断是否和录入的数相等,如果相等,输出索引
for (int i = 0; i < arr.length; i++) {
if (data == arr[i]) {
System.out.println("i = " + i);
flag++;
}
}
/*
4.判断flag是否还是0,如果遍历完,比较完之后,出了for循环,flag还是0,
证明在遍历的过程中,没有走过if
*/
if (flag == 0) {
System.out.println(-1);
}
}
}
4.6 数组复制
public class Demo06Copy {
public static void main(String[] args) {
int[] arr1 = {1,2,3,4};
int[] arr2 = new int[4];
/*
两个数组等长,遍历时可以共用 i
*/
for (int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}
}
}
如果 arr[索引值] 在等号右边,证明是获取值;如果在等号左边,证明时存值
arr[0] = 100;
arr1[i] = arr2[i] → 先看等号右边的,相当于将 arr2 数组的 i 索引上的数据,保存到 arr1 数组的 i 索引上
arr1[0] = arr2[0] → 先看等号右边的,相当于将arr2数组的 0 索引上的元素获取出来,保存到 arr1 数组的 0 索引上
4.7 数组扩容
需求:定义一个数组:int[] arr1 = {1,2,3,4,5},将数组由原来的长度扩容到10.
public class Demo07Array {
public static void main(String[] args) {
/*
需求:定义一个数组:int[] arr1 = {1,2,3,4,5},将数组由原来的长度扩容到10.
*/
int[] oldArr = {1,2,3,4, 5};
// 创建新数组
int[] newArr = new int[10];
// 将老数组中的元素复制到新数组中
for (int i = 0; i < oldArr.length; i++) {
newArr[i] = oldArr[i];
}
// 将新数组的地址值给老数组
oldArr = newArr;
for (int i = 0; i < oldArr.length; i++) {
System.out.println(oldArr[i]);
}
}
}
4.8 数组合并
数组合并:int[] arr1 = {1,2,3}, int[] arr2 = {4,5,6}
public class Demo08Array {
public static void main(String[] args) {
/*
数组合并:int[] arr1 = {1,2,3}, int[] arr2 = {4,5,6}
*/
int[] arr1 = {1,2,3};
int[] arr2 = {4,5,6};
// 创建新数组
int[] newArr = new int[arr1.length + arr2.length];
// 先将 arr1 的元素放到newArr中
for (int i = 0; i < arr1.length; i++) {
newArr[i] = arr1[i];
}
/*
由于已经保存了 arr1 的三个元素,所以我们保存arr2时,就不能从newArr的索引0开始,
不然从arr1中保存的元素会被arr2的元素覆盖
arr2的元素需要从newArr的索引3开始保存
*/
// 先获取 arr1的长度为3
int len = arr1.length; // 3
for (int i = 0; i < arr2.length; i++) {
/*
i = 0时,newArr[3+0] = arr2[0]
i = 1时,newArr[3+1] = arr2[1]
i = 2时,newArr[3+2] = arr2[2]
*/
newArr[len+i] = arr2[i];
}
for (int i = 0; i < newArr.length; i++) {
System.out.println(newArr[i]);
}
}
}
第五章 数组内存图
5.1 内存划分
内存: 可以理解为“内存条”,所有的软件,程序运行起来都会进入到内存中, 占用内存 ,在java的世界中,将 内存划分为5块
分为哪五块:
-
栈(重点)(Stack):主要运行方法,方法的运行都会进栈内存运行,运行完毕之后;需要“弹栈”,为了腾空间,释放内存。
-
堆(重点)(Heap):保存的是对象,数组,每new一次,都会在堆内存中开辟空间,并为这个空间分配一个地址值
堆内存中的数据都是有默认值的
整数: 0
小数: 0.0
字符: ‘\u0000’
布尔: false
引用: null
-
方法区(重点)(Method Area):代码的“预备区”,记录了类的信息以及方法的信息;方法区中主要保存 class 文件以及其中的细腻;代码运行之前,需要先进内存(方法区)
-
本地方法栈(了解)(Native Method Stack):专门运行 native方法(本地方法);本地方法可以理解为堆对java功能的扩充,有很多功能,java语言实现不了,所以就需要依靠本地方法完成(C语言编写)
-
寄存器(了解)(PC register) → 和 CPU 有关
5.2 一个数组的内存图
public class Demo01Array {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr); // 地址值
System.out.println(arr[1]); // 0
arr[1] = 100;
System.out.println(arr[1]); // 100
}
}
5.3 两个数组的内存图
我们创建了两个数组,在堆内存中开辟了两个不同的空间,此时修改一个空间中的数据,不会影响到另一个空间的数据
public class Demo01Array {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr); // 地址值
System.out.println(arr[1]); // 0
arr[1] = 100;
int[] arr2 = new int[3];
System.out.println(arr2); // 地址值
System.out.println(arr2[1]); // 0
arr2[1] = 200;
System.out.println(arr[1]); // 100
System.out.println(arr2[1]); // 200
}
}
5.4 两个数组指向一片内存空间
arr2 不是new出来的,是arr1直接赋值给的,arr1在内存中保存的是地址值,给了arr2,那么arr2的地址值和arr1一样,所以此时arr1和arr2指向了堆内存中的同一片空间(同一个地址值,代表的是同一个数组),此时改变一个数组中的元素会影响到另外一个数组。
第六章 二维数组
6.1 二维数组的定义格式
-
概述:数组中套了多个数组,
-
定义格式:
a.动态初始化
数据类型[][] 数组名 = new 数据类型[m][n] 数据类型 数组名[][] = new 数组类型[m][n] 数据类型[] 数组名[] = new 数组类型[m][n]
m:代表的是二维数组的长度
n:代表的是二维数组中每一个一维数组的长度
数据类型[][] 数组名 = new 数据类型[m][]
没有n表示二维数组中的一维数组没有被创建
b. 静态初始化
数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2,...}, {元素1,元素2,...},...} 数据类型 数组名[][] = new 数组类型[][]{{元素1,元素2,...}, {元素1,元素2,...},...} 数据类型[] 数组名[] = new 数组类型[][]{{元素1,元素2,...}, {元素1,元素2,...},...}
c. 简化静态初始化
数据类型[][] 数组名 = {{元素1,元素2,...}, {元素1,元素2,...},...} 数据类型 数组名[][] = {{元素1,元素2,...}, {元素1,元素2,...},...} 数据类型[] 数组名[] = {{元素1,元素2,...}, {元素1,元素2,...},...}
public class Demo01Array { public static void main(String[] args) { /* int[][] arr1 = new int[m][n]; m:代表的是二维数组的长度 n:代表的是二维数组中每一个一维数组的长度,没有n表示二维数组中的一维数组没有被创建 */ int[][] arr1 = new int[2][2]; int[][] arr2 = new int[2][]; System.out.println("===================="); String[][] arr3 = {{"孙悟空", "唐僧"}, {"刘备", "关羽", "张飞"}, {"宋江"},{"林黛玉", "贾宝玉"}}; } }
6.2 获取二维数组长度
-
格式
数组名.length
-
获取每一个一维数组长度,需要先遍历二维数组,将每一个一维数组遍历出来
public class Demo02Array { public static void main(String[] args) { String[][] arr1 = {{"孙悟空", "唐僧"}, {"刘备", "关羽", "张飞"}, {"宋江"},{"林黛玉", "贾宝玉"}}; System.out.println("二维数组长度"+arr1.length); // 获取每一个一维数组长度 for (int i = 0; i < arr1.length; i++) { /* arr[i] → 代表的是每一个一维数组 */ System.out.println("第"+i+"一维数组长度"+arr1[i].length); } } }
6.3 获取二维数组中的元素
-
格式
数组名[i][j]
i:代表的是一维数组在二维数组中的索引位置
j:代表的是元素在一维数组中的索引位置
public class Demo03Array { public static void main(String[] args) { String[][] arr1 = {{"孙悟空", "唐僧"}, {"刘备", "关羽", "张飞"}, {"宋江"},{"林黛玉", "贾宝玉"}}; System.out.println(arr1[0][0]); System.out.println(arr1[2][0]); System.out.println(arr1[3][1]); } }
6.4 二维数组中存储元素
-
格式
数组名[i][j] = 值
i:代表的是一维数组在二维数组中的索引位置
j:代表的是元素在一维数组中的索引位置
public class Demo04Array { public static void main(String[] args) { String[][] arr = new String[2][2]; arr[0][0] = "张飞"; arr[0][1] = "李逵"; arr[1][0] = "刘备"; arr[1][1] = "宋江"; System.out.println(arr[0][0]); System.out.println(arr[0][1]); System.out.println(arr[1][0]); System.out.println(arr[1][1]); } }
6.5 二维数组的遍历
先遍历二维数组,将每一个一维数组遍历出来,在遍历每一个一维数组,将元素获取出来。
public class Demo05Array {
public static void main(String[] args) {
String[][] arr = new String[2][2];
arr[0][0] = "张飞";
arr[0][1] = "李逵";
arr[1][0] = "刘备";
arr[1][1] = "宋江";
// 遍历二维数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i].length);
for (int j = 0; j < arr[i].length; j++) {
System.out.println(arr[i][j]);
}
}
}
}
6.6 二维数组内存图
public class Demo06Array {
public static void main(String[] args) {
int[][] arr1 = new int[3][];
arr1[1] = new int[] {1, 2, 3};
arr1[2] = new int[3];
arr1[2][1] = 100;
}
}