名词解释

  • Java 语言里提供了支持多维数组的语法。
  • 如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格,像Excel中的表格一样。
  • 对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组。

二维数组的声明和初始化

//1.二维数组的声明和初始化int[] arr = new int[]{1,2,3};//一维数组//静态初始化int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};//二维数组静态//动态初始化1String[][] arr2 = new String[3][2];//动态初始化2String[][] arr3 = new String[3][];//错误情况//String[][] arr4 = new String[][4];//String[4][3] arr5 = new String[][];//int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};//正确情况int arr4[][] = new int[][]{{1,2,3},{4,5},{6,7,8}};int[] arr5[] = new int[][]{{1,2,3},{4,5},{6,7,8}};int[] arr6[] = {{1,2,3},{4,5},{6,7,8}};//声明和静态初始化在一行内可以这样写,称为类型推断。

如何调用数组的指定位置元素

System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//nullarr3[1] = new String[4];
System.out.println(arr3[1][0]);

获取数组的长度

System.out.println(arr4.length);//3
System.out.println(arr4[0].length);//3
System.out.println(arr4[1].length);//2

如何遍历二维数组

for(int i = 0;i < arr4.length;i++){for(int j = 0;j < arr4[i].length;j++){System.out.print(arr4[i][j]);}System.out.println();
}

数组元素的默认初始化值
规定:
二维数组分为外层数组元素,内层数组元素
比如:int[][] arr = new int[4][3];
外层元素:arr[0].arr[1]等
内层元素:arr[0][0].arr[1][2]等

初始化方式一:比如int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同

初始化方式二:比如int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。

eg:

     int[][] arr = new int[4][3];System.out.println(arr[0]);//[I@15db9742(地址值:一维数组,int型,15db9742)System.out.println(arr[0][0]);//0System.out.println(arr);//[[I@6d06d69c(二维数组,int型,6d06d69c)System.out.println("***********************");float[][] arr1 = new float[4][3];System.out.println(arr1[0]);//[F@7852e922(地址值:一维数组,float型,7852e922)System.out.println(arr1[0][0]);//0.0System.out.println("***********************");String[][] arr2 = new String[4][3];System.out.println(arr2[0]);//[Ljava.lang.String;@4e25154f(地址值:一维数组,String型,4e25154f)System.out.println(arr2[0][0]);//nullSystem.out.println("***********************");double[][] arr3 = new double[4][];System.out.println(arr3[0]);//null(一维double型数组,是引用类型,所以是null)//System.out.println(arr3[0][0]);//报错:空指针异常

二位数组内存结构解析

练习1

int[][] arr = new int[][]{{3,5,8},{12,9},{7,0,6,4}};int sum = 0;
for(int i = 0;i < arr.length;i++){for(int j = 0;j < arr[i].length;j++){sum += arr[i][j];}
}
System.out.println("总和为" + sum);

练习2
声明:int[] x,y[]; 在给x,y变量赋值以后,以下选项允许通过编译的是:
a ) x[0] = y;
b) y[0] = x;
c) y[0][0] = x;
d) x[0][0] = y;
e) y[0][0] = x[0];
f) x = y;

答案:
a)x[0]是数,y是二维,no
b)y[0]和x都是一维,yes
c)y[0][0]是数,x是一维,no
d)x[0][0]不存在,no
e)y[0][0]和x[0]都是数,yes
f) x一维,y二维,no

练习3

public class YangHuiTest {public static void main(String[] args) {//1.声明并初始化二维数组int[][] yangHui = new int [10][];//2.给数组的元素赋值for(int i = 0;i < yangHui.length;i++){yangHui[i] = new int[i + 1];//2.1给每行首末位赋值yangHui[i][0] = yangHui[i][i] = 1;//2.2给每行非首末元素赋值//if(i > 1){for(int j = 1;j < yangHui[i].length - 1;j++){yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j];}//}}//3.遍历二维数组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();}}
}

小白自学笔记——JAVA基础 3.2 多维数组相关推荐

  1. 小白自学笔记——JAVA基础 3.1 一维数组

    名词解释 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理. 数组的常见概念 数组名 下标(或索引) 元素 数组的长度 数组的特点 ...

  2. 小白自学笔记——JAVA基础 0.1Java语言概述

    我学习的是宋红康老师的视频,首先是课程大纲. 课程大纲 课程体系 第1章 Java语言概述 第2章 基本语法 第3章 数组 第4章 面向对象编程(上) 第5章 面向对象编程(中) 第6章 面向对象编程 ...

  3. 小白自学笔记——JAVA基础 1.1常用的DOS文件

    今天开始自学JAVA第一课.看的是B站上宋红康老师的视频. 一 学习常用的DOS命令 在搜索栏输入'cmd'打开 eg1:打开D盘文件 [输入] D: eg2:列出当前文件夹下的所有文件 [输入] d ...

  4. 小白自学笔记——JAVA基础 2.5进制

    计算机中不同进制的使用说明 所有数字在计算机底层都以二进制形式存在. 对于整数,有四种表示方式: - 二进制(binary):0,1 ,满2进1.以0b或0B开头. - 十进制(decimal):0- ...

  5. 小白自学笔记——JAVA基础 2.2变量

    变量概述 概念: - 内存中的一个存储区域 - 该区域的数据可以在同一类型范围内不断变化 - 变量是程序中最基本的存储单元,包含变量类型.变量名和存储值 作用 - 用于在内存中保存数据 变量的使用 j ...

  6. 小白自学笔记——JAVA基础 2.9循环结构

    循环结构 在某些条件满足的情况下,反复执行特定代码的功能. 循环语句分类 for 循环 while 循环 do-while 循环 FOR循环结构 for (①初始化部分;②循环条件部分;④迭代部分){ ...

  7. 小白自学笔记——JAVA基础 2.8分支结构

    名词解释 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块. 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即: 顺序结构 程序从上到下逐行地执 ...

  8. 小白自学笔记——JAVA基础 1.2JAVA语言环境搭建

    我使用的是JAVA8版本. 名词解释 JDK--Java Development Kit(JAVA开发工具包) JRE--Java Runtime Environment(JAVA运行环境) JDK. ...

  9. 小白自学笔记——JAVA基础 2.12 项目一 家庭记账软件

    需求说明 模拟实现基于文本界面的<家庭记账软件>. 该软件能够记录家庭的收入.支出,并能够打印收支明细表. 假设家庭起始的生活基本金为10000元. 每次登记收入(菜单2)后,收入的金额应 ...

最新文章

  1. Python为什么这么厉害? 不想成为专业码农? 来学习Python吧!
  2. 第八模块:算法设计模式、企业应用 第2章 企业应用工具学习
  3. 520,一份给程序员的“硬核”脱单秘籍
  4. rh php70 php fpm,mac 通过brew安装php70 +php-fpm+ phalcon3.0.3
  5. 世界手机号码格式_脑炎康复之旅——世界脑炎日病友征文
  6. 收藏贴 :2019年必备43种区块链开发工具
  7. Python标准库collections中与字典有关的类
  8. QT中文乱码深度剖析
  9. servlet的url-pattern匹配规则详细描述
  10. va_list!!!
  11. MyBatis简介及下载地址
  12. nEO iMAGING——400K的图像处理软件(应急处理照片的好帮手)
  13. 直接管理和维护计算机系统的程序称为,全国2008年4月高等教育自学考试计算机原理试题...
  14. jdk-8u271这里的u是什么意思
  15. PublikDemand:汇集群众力量 与大公司抗争到底
  16. 企业邮箱网页登录入口,网页电子邮箱怎么注册?
  17. Windows自带压缩文件工具makecab命令详解
  18. 时空复杂度之珠心算测验
  19. ul、li显示图片标记
  20. 前端页面优化和SEO

热门文章

  1. C#每日一课(二十五)
  2. java通过模板匹配html,OpenCV模板匹配
  3. MATLAB安装后的DOS框出现、脚本文件图标不显示、启动路径修改等问题解决
  4. vb.net 弹出对话框 修改按钮名_无需越狱!iOS12修改运营商名称方法和技巧
  5. 车牌摇号、限行、交通拥堵未来会通通消失?阿里王坚说利用机器智能可以做到
  6. 阴阳师服务器维护2.11,阴阳师2月11日体验服维护详情 2月11日何时开服?
  7. 分析《复联》英雄得出的结论:什么样的技术人适合做管理?
  8. 自动剪视频的软件王者剪辑里的极速编码模式
  9. 清华大学计算机系人机交互,CCAI 2019|史元春:人机交互,要从精准走向模糊
  10. 惠普HP DeskJet Ink Advantage 4178 一体机驱动