当前位置: 首页 > article >正文

【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 二维数组的初始化

二维数组的初始化喝一维数组一致

  1. 静态初始化
  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酒店订房系统

已知一个酒店有九层,每层有九个房间

要求实现:

  1. 查房功能
    1. 显示所有房间的预定情况
  1. 订房功能
    1. 用户输入要预定的房间号 如101,102,201等
    2. 判断用户要预定的房间是否已经预定出去,如果预定出去了则让用户重新选择预定房间号,若没有预定出去,则进入预定流程
    3. 预定流程为输入预定人姓名,预定人性别,预定人身份证号码,预留电话号码;(暂不做格式判断)
    4. 提醒用户预定成功,并且该房间修改为已预定状态,在查房中显示该房间已经预定
  1. 退房功能
    1. 输入要退房的房间号
    2. 判断是否是预定出去的房间,如果是没有预定出去的则无需退房,如果是预定出去的房间,则让用户输入订房时的姓名,如果匹配则成功退房,并且将房间改为可预订状态
  1. 所有功能可以重复操作
//参数声明
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 随机座位表

现需要完成一个班级座位表随机生成系统,提供一组学生名单(一维数组),可动态设置教室的座位行数列数(二维数组);要求将学生名单随机打乱后自动填充到教室的座位中


http://www.kler.cn/news/368105.html

相关文章:

  • Rust教程
  • Linux 进程间通信_匿名管道
  • ClickHouse 5节点集群安装
  • Java面试题十一
  • 深入理解跳出率:如何利用百度统计优化网站用户体验
  • Kafka消费者故障,出现活锁问题如何解决?
  • SpringBoot request.getContextPath()获取到http 而不是https的问题解决
  • android aild 传递多个参数, in ,out,inout
  • php8.3.0安装及扩展安装
  • Windows中API学习-目录管理
  • MySQL 数据出海之数据同步方案
  • 我与Linux的爱恋:进程程序替换
  • 版本工具报错:Error Unity Version Control
  • ArkTS 如何适配手机和平板,展示不同的 Tabs 页签
  • 「AIGC」AI设计工具 v0.dev
  • Webpack优化项⽬的⼿段
  • 【网络安全初识】——互联网发展史
  • PHP 中的 die () 和 exit () 函数有什么不同
  • 计算机mfc100.dll丢失的五种有效解决方法,快速解决dll文件-常见问题
  • 2024年Java面试:必备的易错面试题及答案整理
  • Linux基础知识 - C(自学使用)
  • Unity 开发学习笔记(0):
  • Kafka 解决消息丢失、乱序与重复消费
  • 面向对象编程中类与类之间的关系(一)
  • 草地杂草数据集野外草地数据集田间野草数据集YOLO格式VOC格式目标检测计算机视觉数据集
  • 鸿蒙网络编程系列32-基于拦截器的性能监控示例