Java中的二维数组

news2024/11/26 14:52:45

一、介绍

应用场景:比如我们要开发一个五子棋游戏,期盼就是需要用二维数组来表示。即一维数组的每一个元素也是数组。

例子:请用二维数组输出如下图形:
000000
001000
020300
000000
package com.hspedu.array;

public class TwoDimensionalArray {
    public static void main(String[] args) {
        /*
        请用二维数组输出如下图形:
        000000
        001000
        020300
        000000
         */

        /*
        什么是二维数组?
        1.从定义形式上看 int[][]
        2.原来的一维数组的每个元素都是一堆数组,就构成二维数组。
          因此如果要得到每个一维数组的值,还需要再次遍历
        3.如果要访问第(i+1)个一维数组的j+1个值,用 arr[i][j]
         */
        int[][] arr = {{0,0,0,0,0,0},{0,0,1,0,0,0},
                        {0,2,0,3,0,0},{0,0,0,0,0,0}};

        //输出二维图形
        //1.arr[i].length得到对应的每个一维数组的长度
        for (int i = 0; i < arr.length; i++){  //这里的arr.length是4,代表的是一维数组的长度
            for (int j = 0; j < arr[i].length; j++){
                System.out.print(arr[i][j] + " ");  //输出了一维数组
            }
            System.out.println();
        }
    }
}

二、定义

1、动态初始化1

  • 语法:类型[][] 数组名 = new 类型[二维数组大小][每个一维数组大小]
  • 比如:int a[][] = new int[2][3]

重点:二维数组在内存中的存在形式。(真正存放数据的地方是最右边的0x0022和0x0033)

 2、动态初始化2

  1.  先声明:类型 数组名[][];
  2. 再定义(开辟空间):数组名 = new 类型[大小][大小]
  3. 赋值(有默认值,比如int 类型的就是0)
public class TwoDimensionalArray02 {
    public static void main(String[] args) {
        int arr[][];  //声明二维数组
        arr = new int[2][3];  //再开辟空间
    }
}

3、动态初始化--->列数不确定

 下面是实现的代码:

package com.hspedu.array;
/*
动态创建下面的数组,并输出
i = 0: 1
i = 1: 2 2
i = 2: 3 3 3
 */
public class TwoDimensioanlArray03 {
    public static void main(String[] args) {
        int[][] arr = new int[3][];  //只是创建了二维数组,一共有3个一维数组,但是每个一维数组还没有开辟数据空间
        for (int i = 0; i < arr.length; i++){  //遍历arr每个一维数组
            //给每一个一维数组开空间
            arr[i] = new int[i+1];
            //遍历一维数组,并给一维数组的每个元素赋值
            for (int j = 0; j < arr[i].length; j++){
                arr[i][j] = i+1;
            }
        }

        //遍历arr输出
        for (int i = 0; i < arr.length; i++){
            for (int j = 0; j < arr[i].length; j++){
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}

4、静态初始化

语法:类型 数组名[][] = {{值1,值2..},{值1,值2..},{值1,值2..}}

三、练习题

1、要求:int arr[][] = {{4,6},{1,4,5,7},{-2}};  //遍历该二维数组,并得到和

package com.hspedu.array;

public class TwoDimensionalArray05 {
    public static void main(String[] args) {
        //要求:int arr[][] = {{4,6},{1,4,5,7},{-2}};
        // 遍历该二维数组,并得到和
        int sum = 0;
        int arr[][] = {{4,6},{1,4,5,7},{-2}};
        for (int i = 0; i < arr.length; i++){
            for (int j = 0; j < arr[i].length; j++){
                sum = sum + arr[i][j];
            }
        }
        System.out.println("sum= " + sum);
    }
}

四、杨辉三角

package com.hspedu.array;
/*
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

规律:
1.第一行有1个元素,第n行有n个元素
2.每一行的第一个元素和最后一个元素都是1
3.从第三行开始,除了第一个元素和最后一个元素,其余的都是:
    arr[i][j] = arr[i-1][j-1] + arr[i-1][j]
 */
public class YangHui {
    public static void main(String[] args) {
        int[][] yangHui = new int[6][];
        for (int i = 0; i < yangHui.length; i++){  //遍历yangHui的每个元素
            //给每个一维数组开辟空间
            yangHui[i] = new int[i+1];
            //给每一个一维数组赋值
            for (int j = 0; j < yangHui[i].length; j++){
                if (j == 0 || j == yangHui[i].length-1){
                    yangHui[i][j] = 1;
                }else {
                    yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j];
                }
            }
        }
        //输出杨辉三角
        for (int i = 0; i < yangHui.length; i++){
            for (int j = 0; j < yangHui[i].length; j++){
                System.out.print(yangHui[i][j] + " ");
            }
            System.out.println();
        }
    }
}

 五、二维数组使用细节和注意事项

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90229.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java做UI自动化和app自动化中动态代理@FindBy的工作原理【杭州多测师_王sir】【杭州多测师】...

Java做UI自动化和app自动化中动态代理FindBy的工作原理一、背景简介由于Selenium框架采用PageObject设计模式让测试代码与被测页面对象代码分离&#xff0c;因而提供了不少很方便的注解来达到目的&#xff0c;其中有一个注解就是FindBy。在使用中&#xff0c;只要通过在field中…

ruoyi 在页面上增加一个显示字段(数据库增加字段,页面后端处理)

例如&#xff0c;上图所示&#xff0c; 【用户工资表】现有字段为用户id&#xff0c;用户工资&#xff0c;生效时间&#xff0c;备注信息 这些字段也就是你设计数据库时&#xff0c;数据库工资表字段 &#xff0c;现在&#xff0c;要让显示这个页面&#xff0c;增加一个用户姓…

Flutter for Web 首次首屏优化——JS 分片优化

作者&#xff1a;马坤乐(坤吾) Flutter for Web&#xff08;FFW&#xff09;从 2021 年发布至今&#xff0c;在国内外互联网公司已经得到较多的应用。作为 Flutter 技术在 Web 领域的有力扩充&#xff0c;FFW 可以让熟悉 Flutter 的客户端同学直接上手写 H5&#xff0c;复用 A…

2023年有哪些半入耳蓝牙耳机?半入耳式蓝牙耳机排行榜

工作生活中最常用的真无线蓝牙耳机来说&#xff0c;各式各样、价格悬殊的产品&#xff0c;很多人不知道该如何选择&#xff0c;半入耳式的佩戴舒适度一直都是公认的好&#xff0c;下面小编分享几个性能表现、续航时间都非常优秀的半入耳式蓝牙耳机 TOP1:南卡小音舱蓝牙耳机 音…

Java IO流补充(字符流)

字符 那么在Java中的字符用char来表示&#xff0c;char存储字符。Java使用Unicode来表示字符。Unicode可以表示在所有人类语言中找到的所有字符。Java char是16位类型 字符的范围是 0 ~ 65536 ,没有负字符。字符可以是文字、字母数字、符号等等。 字符流 尽管Java中字节流的…

【Spring】——17、@Resource注解和@Inject注解?

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

使用 systemd 管理多个 MySQL 服务器实例

使用 systemd 管理多个 MySQL 服务器实例 文章目录使用 systemd 管理多个 MySQL 服务器实例先决条件支持 systemd 的操作系统每个实例配置独立的目录和参数部署多实例环境1. 配置选项文件使用 systemd 管理 MySQL 多实例总结本文仅讲述使用 RPM 包安装的多个 MySQL 实例如何使用…

IronXL 2022.12.10926 Crack

关于适用于 .NET 的 IronXL 在 C# 中阅读和编辑 Excel 电子表格&#xff0c;无需 MS Office 或 Excel Interop。 IronXL for .NET 允许开发人员在 .NET 应用程序和网站中读取、生成和编辑 Excel&#xff08;和其他电子表格文件&#xff09;。您可以读取和编辑 XLS/XLSX/CSV/TSV…

操作系统-内存管理(内存的分配与回收(非连续分配方式,基本分页存储管理方式,基本地址变换机构))

文章目录1. 基本分页存储管理基本地址变换机构1. 基本分页存储管理 分页存储&#xff1a; 将内存空间分为一个个大小相等的分区&#xff08;eg&#xff1a;每个分区4KB&#xff09;&#xff0c;每个分区就是一个页框 每个页框有一个编号&#xff0c;即页框号&#xff0c;页框…

C++ 重要笔记与题 (循环-嵌套-数组)

文章目录十 循环10.1 字符与循环10.2 数与循环十一 循环嵌套——不拘一格11.2数学与循环——脉脉相通十 循环 10.1 字符与循环 题1.1&#xff1a;循环输出26个字母&#xff0c;从A-Z。 for(char i A;i<Z;i){cout<<i<<" ";}题1.2&#xff1a;输入某…

第二证券|定增市场回暖 机构争抢优质项目

今年下半年以来&#xff0c;定增商场持续回暖。最新数据显现&#xff0c;到12月13日&#xff0c;下半年以来A股商场实施定增计划的上市公司近200家&#xff0c;比较上半年的133家显着增加。持续回暖的定增商场吸引了不少组织的目光&#xff0c;不只百亿级私募活跃捡拾筹码&…

大学生个人博客网页设计模板 学生个人博客网页成品 简单个人网站作品下载 静态HTML CSS个人网页作业源代码

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

[附源码]Python计算机毕业设计SSM基于java网上心理咨询系统数据分析(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

docke+gitlab+jenkins+springboot

安装Gitlab 开放防火墙端口80和配置映射文件夹 firewall-cmd --zonepublic --add-port80/tcp --permanent firewall-cmd --reload mkdir -p /docker_data/gitlab/{data,logs,config}启动Gitlab容器&#xff08;启动容器之前确保80&#xff0c;443端口没用被占用&#xff0c;被…

通话类型转换流程之AudioCall到VideoCall

目录 概述时序图关键代码关键log总结 一、概述 这里的通话类型指的是语音通话和视频通话&#xff0c;转换包括upgrade/ downgrade升降级&#xff0c;就是语音通话升级为视频通话、视频通话降级为语音通话。升级为视频通话一般就是包括如下图示的4步&#xff0c;MO发起请求&…

Microsoft SharePoint Online 更新功能可能是下一次勒索攻击的目标

Microsoft SharePoint Online是被使用最广泛的内容管理平台之一。但令人担忧的是&#xff0c;最近几年我们发现大部分攻击者可以滥用 SharePoint Online 和 OneDrive for Business 中的某项功能来加密您的所有文件并以此来勒索赎金。 SharePoint Online 据观察发现可能存在潜在…

四旋翼无人机学习第15节--PCB Editor简单绘制封装-手动绘制封装

文章目录1 前言2 class与sub class3 手动绘制3.1 芯片手册分析3.2 手动绘制1 前言 上一篇博客我们学习了获取封装的几种途径&#xff0c;分别是下载&#xff0c;软件生成与软件转化。本次博客开始讲手动绘制封装。 2 class与sub class 参考博客&#xff1a;第11讲、Allegro …

前端高频手写面试题集锦

手写深度比较isEqual 思路&#xff1a;深度比较两个对象&#xff0c;就是要深度比较对象的每一个元素。> 递归 递归退出条件&#xff1a; 被比较的是两个值类型变量&#xff0c;直接用“”判断被比较的两个变量之一为null&#xff0c;直接判断另一个元素是否也为null 提前结…

对受控组件和非受控组件的理解,以及应用场景?

一、受控组件 受控组件&#xff0c;简单来讲&#xff0c;就是受我们控制的组件&#xff0c;组件的状态全程响应外部数据 举个简单的例子&#xff1a; class TestComponent extends React.Component {constructor (props) {super(props);this.state { username: lindaidai }…