Java二维数组的遍历

目录

  • 创建二维数组
  • 二位数组初始化
  • 二位数组的遍历
    • 分析

创建二维数组

public class TestArray05{
        public static void main(String[] args){
                //定义一个二维数组:
                int[][] arr = new int[3][];//本质上定义了一个一维数组,长度为3
                
                int[] a1 = {1,2,3};
                arr[0] = a1;
                
                arr[1] = new int[]{4,5,6,7};
                
                arr[2] = new int[]{9,10};
        }
}

这是一个Java程序,用于演示如何定义和初始化一个二维整数数组。

首先,我们来逐步分析这段代码:

  1. 在主方法中,首先定义了一个二维整数数组arr,其大小为3行。但是,每行的长度尚未指定(这正是该代码要做的)。
  2. int[] a1 = {1,2,3};: 定义了一个名为a1的一维整数数组,并初始化为{1,2,3}。
  3. arr[0] = a1;: 将一维数组a1赋值给二维数组arr的第一行。此时,arr的形状为:
1 2 3
  1. arr[1] = new int[]{4,5,6,7};: 为二维数组arr的第二行赋值一个新的一维数组,包含4个整数:4, 5, 6, 和 7。此时,arr的形状为:
1 2 3
4 5 6 7
  1. arr[2] = new int[]{9,10};: 为二维数组arr的第三行赋值一个新的长度为2的一维数组,包含整数9和10。此时,arr的形状为:
1 2 3
4 5 6 7
9 10

总结:这段代码演示了如何为一个二维整数数组分配行和每个行中的元素。但是请注意,这种方式的动态初始化虽然有时很方便,但在处理更复杂的数组操作时可能会带来一些困惑,因为它与常规的静态初始化方式有所不同。

二位数组初始化

在Java中,二维数组可以以静态、动态和默认的方式进行初始化。

  1. 静态初始化:

静态初始化是在声明二维数组时直接分配内存并初始化数组元素。

int[][] array2DStatic = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

在静态初始化时,每个子数组的大小必须相同,且每个子数组的大小在声明时必须已知。
2. 动态初始化:

动态初始化是在声明二维数组时只分配内存,然后在需要时再对数组元素进行赋值。

int[][] array2DDynamic = new int[3][];
array2DDynamic[0] = new int[]{1, 2, 3};
array2DDynamic[1] = new int[]{4, 5, 6};
array2DDynamic[2] = new int[]{7, 8, 9};

在动态初始化时,可以先声明二维数组,然后逐个对每个子数组进行初始化。子数组的大小可以在声明时未知,也可以在后续赋值时改变。
3. 默认初始化:

默认初始化是在声明二维数组后不进行任何初始化,这时数组的所有元素都将被自动初始化为默认值(对于整数类型,默认值为0)。

int[][] array2DDefault = new int[3][3]; // 所有元素默认初始化为0

默认初始化通常用于声明并创建一个空数组,然后在后续的代码中再对其进行赋值。

二位数组的遍历

public class TestArray05{
        public static void main(String[] args){
                //定义一个二维数组:
                int[][] arr = new int[3][];//本质上定义了一个一维数组,长度为3
                
                int[] a1 = {1,2,3};
                arr[0] = a1;
                
                arr[1] = new int[]{4,5,6,7};
                
                arr[2] = new int[]{9,10};
                
                //读取6这个元素:
                //System.out.println(arr[1][2]);
                
                //对二维数组遍历:
                //方式1:外层普通for循环+内层普通for循环:
                for(int i=0;i<arr.length;i++){
                        for(int j=0;j<arr[i].length;j++){
                                System.out.print(arr[i][j]+"\t");
                        }
                        System.out.println();
                }
                
                //方式2:外层普通for循环+内层增强for循环:
                for(int i=0;i<arr.length;i++){
                        for(int num:arr[i]){
                                System.out.print(num+"\t");
                        }
                        System.out.println();
                }
                
                //方式3:外层增强for循环+内层增强for循环:
                for(int[] a:arr){
                        for(int num:a){
                                System.out.print(num+"\t");
                        }
                        System.out.println();
                }
                
                //方式4:外层增强for循环+内层普通for循环:
                for(int[] a:arr){
                        for(int i=0;i<a.length;i++){
                                System.out.print(a[i]+"\t");
                        }
                        System.out.println();
                }
        }
}

在这里插入图片描述

分析

以上代码中包含四种不同的循环嵌套方式,下面是对这四种循环嵌套的运行过程的分析:

方式1:外层普通for循环+内层普通for循环

运行过程:

  1. 外层循环变量i从0开始,到arr.length-1结束。
  2. 内层循环变量j从0开始,到arr[i].length-1结束。
  3. 在内层循环中,使用arr[i][j]来访问二维数组的元素,并打印出来。
  4. 内层循环结束后,执行System.out.println()打印换行。
  5. 外层循环结束后,输出整个二维数组的元素。

方式2:外层普通for循环+内层增强for循环

运行过程:

  1. 外层循环变量i从0开始,到arr.length-1结束。
  2. 内层增强for循环遍历arr[i]数组中的所有元素。
  3. 在内层循环中,使用num来访问一维数组的元素,并打印出来。
  4. 内层循环结束后,执行System.out.println()打印换行。
  5. 外层循环结束后,输出整个二维数组的元素。

方式3:外层增强for循环+内层增强for循环

运行过程:

  1. 外层增强for循环遍历arr数组中的所有元素。
  2. 内层增强for循环遍历当前元素(即子数组)中的所有元素。
  3. 在内层循环中,使用num来访问元素,并打印出来。
  4. 内层循环结束后,执行System.out.println()打印换行。
  5. 外层循环结束后,输出整个二维数组的元素。

方式4:外层增强for循环+内层普通for循环

运行过程:

  1. 外层增强for循环遍历arr数组中的所有元素。
  2. 内层普通for循环遍历当前元素(即子数组)中的所有元素。
  3. 在内层循环中,使用a[i]来访问元素,并打印出来。
  4. 内层循环结束后,执行System.out.println()打印换行。
  5. 外层循环结束后,输出整个二维数组的元素。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java hutool工具类实现将数据下载到excel

通过hutool工具类&#xff0c;对于excel的操作变得非常简单&#xff0c;上篇介绍的是excel的上传&#xff0c;对excel的操作&#xff0c;核心代码只有一行。本篇的excel的下载&#xff0c;核心数据也不超过两行&#xff0c;简洁方便&#xff0c;特别适合当下的低代码操作。 下载…

vue2学习笔记(2/2)

vue2学习笔记&#xff08;1/2&#xff09; vue2学习笔记&#xff08;2/2&#xff09; 文章目录 1. 初始化脚手架2. 分析脚手架&render函数文件结构图示及说明main.jsindex.htmlApp.vueSchool.vueStudent.vue 关于不同版本的Vue修改默认配置vue.config.js配置文件 3. ref属…

百分点科技:《数据科学技术: 文本分析和知识图谱》

科技进步带来的便利已经渗透到工作生活的方方面面&#xff0c;ChatGPT的出现更是掀起了新一波的智能化浪潮&#xff0c;推动更多智能应用的涌现。这背后离不开一个朴素的逻辑&#xff0c;即对数据的收集、治理、建模、分析和应用&#xff0c;这便是数据科学所重点研究的对象——…

探索前端开发框架:React、Angular 和 Vue 的对决(二)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

使用Ettus USRP X440对雷达和EW系统进行原型验证

概览 无论是保障己方平台的生存能力&#xff0c;还是扰乱敌方频谱使用&#xff0c;以电磁(EM)频谱为主导都是任务成功的主要因素。电磁频谱操作(Electromagnetic Spectrum Operation, EMSO)需要使用战术系统来监测敌方的频谱活动、定位其发射器并帮助己方制定行动计划。软件无…

问题:魁奈在税收政策方面的主张是() #学习方法#其他#经验分享

问题&#xff1a;魁奈在税收政策方面的主张是&#xff08;&#xff09; A.征收农业税 B.征收工商业税 C.征收间接税 D.征收地租税 参考答案如图所示

网络协议梳理

1 引言 在计算机网络中要做到有条不紊地交换数据&#xff0c;就必须遵守一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。这里所说的同步不是狭义的&#xff08;即同频或同频同相&#xff09;而是广义的&#xff0c;即在一定的条件下应当发生什…

自学网安-IIS服务器

部署环境&#xff1a;win2003 配置环境&#xff1a;winxp ip&#xff1a;10.1.1.2 win2003 ip&#xff1a;10.1.1.1 开始安装 双击“应用程序服务器” 双击“Internet 信息服务&#xff08;IIS&#xff09;” 勾选万维网服务&#xff0c;确定然后下一步 查看端口号;netstat …

【新书推荐】5.2 位运算符

本节必须掌握的知识点&#xff1a; 位运算 示例十七 代码分析 汇编解析 5.2.1 位运算 位运算符如表5-2所示&#xff1a; 运算符 作用 示例 & 按位与 两个操作数同时为1&#xff0c;结果为1&#xff1b; | 按位或 两个操作数只要有一个为1&#xff0c;结果就为1&a…

参考数据集INRIA Holidays dataset

Download datasets 很贴心,MATLAB访问代码: % This function reads a siftgeo binary file % % Usage: [v, meta] = siftgeo_read (filename, maxdes) % filename the input filename % maxdes maximum number of descriptors to be loaded % (default=unlimit…

MySQL之SQL的查询语句如何执行

文章目录 前言一、一条查询的SQL是如何执行的二、MySQL的“零件”们1.连接器2.查询缓存3.分析器4.优化器5.执行器 总结 前言 做了多年技术之后&#xff0c;技术更新换代太快&#xff0c;从我入行时候从单体架构到后面分布式SOA&#xff0c;再到微服务&#xff0c;从后端再到全…

进程中线程使用率偏高问题排查

1. top命令查看CPU使用率高的进程 2. top -H -p 15931(进程PID) 查看进程下的线程 3. printf "%x\n" 17503(线程PID) 线程PID 10进制转16进制 0x445f 4. jstack -l 15931(JVM进程PID) 导出java进程栈信息&#xff0c;里面包含线程nid0x445f和所在的类&#xff0…

路由器、路由器的构成、交换结构

目录 1 路由器 1.1 路由器的结构 “转发”和“路由选择”的区别 1.1.1 输入端口对线路上收到的分组的处理 1.1.2 输出端口将交换结构传送来的分组发送到线路 2.2 交换结构 2.2.1 通过存储器 2.2.2 通过总线 2.2.3 通过纵横交换结构 (crossbar switch fabric) 1 路由器…

Ai知识图谱

总结&#xff1a;从AI技术栈全貌来看&#xff0c;基础模型、基础算法&#xff0c;个人及小公司是玩不起的&#xff0c;大公司才有对应人力、财力、算力 去做&#xff0c;个人更多的是要在应用场景上创新&#xff0c;几个关键的技术必须会&#xff1a;编码语言&#xff08;Pytho…

列式数据库、行式数据库简介

列式数据库、行式数据库简介 1、数据准备2、行式数据库3、列式数据库4、行式、列式存储对比 常见的行式数据库有Mysql&#xff0c;DB2&#xff0c;Oracle&#xff0c;Sql-server等&#xff1b;列数据库&#xff08;Column-Based&#xff09;数据存储方式按列存储&#xff0c;常…

WebSocket学习笔记以及用户与客服聊天案例简单实现(springboot+vue)

一&#xff1a;介绍&#xff1a; 二&#xff1a;http协议与websocket对比&#xff1a; 三&#xff1a;websocket协议&#xff1a; 四&#xff1a;实现&#xff1a; 4.1客户端&#xff1a; 4.2服务端&#xff1a; 五&#xff1a;案例&#xff1a; 环境&#xff1a;做一个书店…

Vim工具使用全攻略:从入门到精通

引言 在软件开发的世界里&#xff0c;Vim不仅仅是一个文本编辑器&#xff0c;它是一个让你的编程效率倍增的神器。然而&#xff0c;对于新手来说&#xff0c;Vim的学习曲线似乎有些陡峭。本文将手把手教你如何从Vim的新手逐渐变为高手&#xff0c;深入理解Vim的操作模式&#…

机器学习 | 掌握线性回归的实战技巧

目录 初识线性回归 损失和优化 欠拟合与过拟合 正则化线性模型 模型的保存与加载 初识线性回归 线性回归(Linearregression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。特点是&#xff1a;有一个自变量的情况称为单…

备战蓝桥杯---数据结构与STL应用(进阶2)

本文将主要围绕有关map的今典应用展开&#xff1a; 下面我用图进行分析&#xff1a; 下面为AC代码&#xff1a; #include<bits/stdc.h> using namespace std; struct Point {int x,y;bool operator < (const Point & r) const {return x < r.x || ( x r.x &a…

Day 1. 学习linux高级编程之Shell命令和IO

1.C语言基础 现阶段学习安排 2.IO编程 多任务编程&#xff08;进程、线程&#xff09; 网络编程 数据库编程 3.数据结构 linux软件编程 1.linux&#xff1a; 操作系统&#xff1a;linux其实是操作系统的内核 系统调用&#xff1a;linux内核的函数接口 操作流程&#xff…