【Java小白图文教程】-06-二维数组
精品专题:
01.《C语言从不挂科到高绩点》课程详细笔记
https://blog.csdn.net/yueyehuguang/category_12753294.html?spm=1001.2014.3001.5482
02. 《SpringBoot详细教程》课程详细笔记
https://blog.csdn.net/yueyehuguang/category_12789841.html?spm=1001.2014.3001.5482
03.《SpringBoot电脑商城项目》课程详细笔记
https://blog.csdn.net/yueyehuguang/category_12752883.html?spm=1001.2014.3001.5482
04.《VUE3.0 核心教程》课程详细笔记
https://blog.csdn.net/yueyehuguang/category_12769996.html?spm=1001.2014.3001.5482
05. 《SSM详细教程》课程详细笔记
https://blog.csdn.net/yueyehuguang/category_12806942.html?spm=1001.2014.3001.5482
================================
|| 持续分享系列教程,关注一下不迷路 ||
|| 视频教程:墨轩大楼 ||
================================
05_二维数组
1.概述
目前为止对于数组的理解:一组存储相同数据类型的容器。并且容器中存储的单个的值(基本数据类型,String),这种数据结构称为一维数组;由于数据存储的特殊性,可能需要向数组中存储一些其他的数组,即数组中的每一个元素也是一个数组,这种数组就成为二维数组。
二维数组:表示为一个数组中存储的每一个元素也是一个数组对象,这样的称之为二维数组。二维数组一般的使用 场景:游戏开发时,作为地图使用,例如 五子棋的棋盘,坦克大战的地图,电影院做布局(选座功能)等等
2.定义与初始化
2.1 二维数组的定义
二维数组的定义跟一维数组类似的,知识多了一个[],语法:
数据类型[][] 数组名;
//二维数组的定义
int[][] arr1;
int arr2[][];//不建议使用
2.2 二维数组的初始化
二维数组的初始化喝一维数组一致
- 静态初始化
- 动态初始化
2.2.1 静态初始化
静态初始化就是在声明数组的时候直接给数组赋值
int[][] arr3 = {{12,23},{1,2,3},{123,12,1}};
2.2.2 动态初始化
动态初始化指的是,在定义数组时只为数组指定了容量,不设置具体的值
//声明了一个数组,里面可以装三个元素,而且每个元素又是开一个装2个元素的数组
int[][] arr4 = new int[3][2];
//声明了一个数组,里面可以装三个元素,每个元素又是一个数组
int[][] arr5 = new int[3][];
3.元素的获取与遍历
3.1 元素的获取与赋值
3.1.1 元素的获取
由于二维数组是一种矩阵结构,因此如果使用以为数组的获取方式,则获取到的没有给元素依然是一个数组
int[][] arr3 = {{12,23},{1,2,3},{123,12,1}};
int[] a = arr3[1];//获取二维数组中的第2个元素,还是一个数组对象
int i = a[0];//获取数组对象中的第一个元素
//以上代码等价于:arr3[1][0]
3.1.2 二维数组赋值
二维数组的赋值也是通过索引
//声明了一个数组,里面可以装三个元素,而且每个元素又是开一个装2个元素的数组
int[][] arr4 = new int[3][2];
//arr4[0] = new int[2];
arr4[0][0] = 5;
arr4[0][1] = 6;
//arr4[1] = new int[2];
arr4[1][0] = 5;
arr4[1][1] = 6;
//声明了一个数组,里面可以装三个元素,每个元素又是一个数组
int[][] arr5 = new int[3][];
arr5[0] = new int[3];
arr5[0][0] = 5;
arr5[0][1] = 6;
arr5[0][2] = 1;
arr5[1] = new int[2];
arr5[1][0] = 5;
arr5[1][1] = 6;
3.2 二维数组的遍历
二维数组的遍历喝一维数组相同,只是由于二维数组中的每一个元素都是一个数组类型,所有 比一维数组多了一层循环遍历
int[][] arr3 = {{12,23},{1,2,3},{123,12,1}};
for (int[] a:arr3) {
for (int x:a) {
System.out.print(x + " ");
}
System.out.println();
}
System.out.println("====================");
for (int i = 0; i < arr3.length; i++) {
//arr3[i] 也是一个数组 int[] arr = arr3[i]
//System.out.println(arr3[i]);
for (int j = 0; j < arr3[i].length; j++) {
System.out.print(arr3[i][j] + " ");
}
System.out.println();
}
4.二维数组综合练习
4.1酒店订房系统
已知一个酒店有九层,每层有九个房间
要求实现:
- 查房功能
-
- 显示所有房间的预定情况
- 订房功能
-
- 用户输入要预定的房间号 如101,102,201等
- 判断用户要预定的房间是否已经预定出去,如果预定出去了则让用户重新选择预定房间号,若没有预定出去,则进入预定流程
- 预定流程为输入预定人姓名,预定人性别,预定人身份证号码,预留电话号码;(暂不做格式判断)
- 提醒用户预定成功,并且该房间修改为已预定状态,在查房中显示该房间已经预定
- 退房功能
-
- 输入要退房的房间号
- 判断是否是预定出去的房间,如果是没有预定出去的则无需退房,如果是预定出去的房间,则让用户输入订房时的姓名,如果匹配则成功退房,并且将房间改为可预订状态
- 所有功能可以重复操作
//参数声明
static int row = 9;//楼层
static int col = 9;//每层的房间数
//定义一个二维数组来描述每间房
static String[][] names = new String[row][col];
//Scanner对象
static Scanner scanner = new Scanner(System.in);
//对于酒店房间初始化操作 每间房标记为“empty”
public static void room(){
for (int i=0;i<names.length;i++){
for (int j=0;j<names.length;j++){
names[i][j] = "empty";
}
}
}
public static void main(String[] args) {
//初始化房间
room();
//欢迎语句
System.out.println("***********欢迎来到晚枫情侣酒店**********");
while(true){
System.out.println("***********请选择你要执行的操作***********");
System.out.println("*****【1】查房\t【2】订房\t【3】退房\t【4】推出系统******");
//接收用户的选择
int code = scanner.nextInt();
switch (code){
case 1:
//查房
selectRoom();
break;
case 2:
//订房
reaerveRoom();
break;
case 3:
//退房
outRoom();
break;
case 4:
System.out.println("欢迎下次使用该系统!!!");
return;
default:
System.out.println("操作有误!!!!");
}
}
}
//退房操作
private static void outRoom() {
System.out.println("请输入你要退房的房间号:");
//接收用户输入的房间号
int outRoomNumber = scanner.nextInt();
//判断该房间是否有人入住
if("empty".equals(names[outRoomNumber/100-1][outRoomNumber%10-1])){
//没有人入住,所以你肯定退不了
System.out.println("该房间都没有预定,你退啥!!!");
}else{
System.out.println("请输入入住人姓名:");
//接收用户输入的姓名
String name = scanner.next();
if(names[outRoomNumber/100-1][outRoomNumber%10-1].equals(name)){
//退房,修改房间预定信息
names[outRoomNumber/100-1][outRoomNumber%10-1] = "empty";
System.out.println("退房成功!请带好您的女朋友,欢迎下次再来");
}else {
System.out.println("请输入正确的入住人姓名");
}
}
}
//订房操作
private static void reaerveRoom() {
System.out.println("请输入你的预定房间号:");
//接收用户输入的房间号
int roomNumber = scanner.nextInt();
//通过用户输入的房间号来获取该房间的预定情况
//402 808 504
String roomResult = names[roomNumber/100-1][roomNumber%10-1];
//判断是否被预定
if("empty".equals(roomResult)){
//空房,可以预定
System.out.println("请输入入住人姓名:");
String clientName = scanner.next();
System.out.println("请输入入住人数:");
int numberOfPeople = scanner.nextInt();
System.out.println("请输入登记人性别(男/女):");
String sex = scanner.next();
sex = "男".equals(sex)?"先生":"女士";
//修改预定状态
names[roomNumber/100-1][roomNumber%10-1] = clientName;
System.out.println("尊敬的"+clientName+sex+
",您以成功预定晚枫酒店"+roomNumber+"房间。");
System.out.println("预祝您在晚枫酒店有一个愉快的夜晚,同时也要注意身体!!!");
}else {
System.out.println("该房间已经预定了,你就别想了!!!");
}
}
//查房操作
private static void selectRoom() {
for (int i=0;i<names.length;i++){
//遍历的房间号
for (int j=0;j<names.length;j++){
System.out.print("8"+(i+1)+"0"+(j+1)+"\t");
}
System.out.println();
//遍历房间状态
for (int j=0;j<names.length;j++){
System.out.print(names[i][j] + "\t");
}
System.out.println();
System.out.println("--------------------------------------------------------------");
}
}
4.2 电影院选座系统
使用二维数组完成一个影院的座位布局以及座位选择,要求实现如下功能:
- 可以输入影院座位的行数和列数,生成一个座位的布局图
- 可以输入行数和列数对座位选择,如果该座位已经被选择,则提示:此座位有人,无法选择!
- 选座成功之后,将最新的座位布局输出
4.3 五子棋的逻辑实现
完成一个五子棋的棋盘绘制以及走子功能:
- 输入棋盘大小(行,列)显示棋盘布局
- 输入要落子的位置(行,列)
- 实现白子,黑子轮流走子
- 扩展:实现输赢判断
4.4 随机座位表
现需要完成一个班级座位表随机生成系统,提供一组学生名单(一维数组),可动态设置教室的座位行数列数(二维数组);要求将学生名单随机打乱后自动填充到教室的座位中