多维数组的使用

由数组构成的数组

二维数组:
① 二维数组的声明和初始化
② 如何调用数组的指定位置的元素
③ 如何获取数组的长度
④ 如何遍历数组
⑤ 数组元素的默认初始化值 :见ArrayTest1.java
数组元素是整形:0
数组元素是浮点型:0.0
数组元素是char型:0或‘\u0000’
数组元素是布尔型:false
数组元素是引用数据类型时:null
⑥ 数组的内存解析 :见ArrayTest1.java
① 二维数组的声明

int[] arr = new int[]{1,2,3};  //一维数组
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};;  //一维数组

① 二维数组的初始化1

String[][] arr2 = new String[3][2];
String[][] arr3 = new String[3][];

//正确:

int[] arr4[] = new int [][]{{1,2,3},{4,5},{6,7,8}};
int[] arr4[] = {{1,2,3},{4,5},{6,7,8}};//类型推断

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

System.out.println(arr1[0][1]);;//2
System.out.println(arr3[1][1]; //null

③ 如何获取数组的长度

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

④ 如何遍历二维数组

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

二维数组遍历需要两层for循环

⑤ 数组元素的默认初始化值 :见ArrayTest1.java
数组元素是整形:0
数组元素是浮点型:0.0
数组元素是char型:0或‘\u0000’
数组元素是布尔型:false
数组元素是引用数据类型时:null
⑥ 数组的内存解析 :见ArrayTest1.java
规定:二维数组分为外层数组的元素,内层数组的元素

int[][] arr = new int[4][3];

外层元素:arr[0],arr[1]等
内层元素:arr[0][0],arr[1][2]等;

int[][] arr = new int[4][3];
System.out.println(arr[0]);//输出地址值
System.out.println(arr);//输出二维数组首地址

针对初始化方式一、比如:int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组的初始化情况相同。
针对初始化方式二、比如:int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。
⑥ 二维数组的内存解析 :

数组长度一旦确定,就不可修改.

数据结构:
1.数据与数据之间的逻辑关系:集合、一对一、一对多、多对多
2.数据的存储结构:
线性表:顺序表(比如:数组)、链表、栈、队列
树形结构:二叉树
图形结构

算法:
排序算法:
搜索算法:

二维数组课后练习题:
获取arr数组中所有元素的和。:使用for嵌套循环即可。

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);

杨辉三角:

package shangguigu;
public class array {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();}//3.}
}


array2 = array1;// 这是把array1的地址赋值给array2,两个指向的是同一个数组,所以当array2改变的时候,array1也会跟着改变。

array2 = new int[array1.length};
for(int i=0; i<array2.length; i++)
{array2[i] = array1[i];
}

因为此处new了一个新数组,所以是新开辟了一段内存空间,是真的”复制“了array1给array2,修改array2的值不会改变array1.

数组的复制:

String[] arr1 = new String[arr.length];
for(int i = 0;i<arr1.length;i++){arr1[i] = arr[i];
}

数组的反转:

for(int i =0;i<arr1.length/2;i++){String temp = arr[i];
arr[i] = arr[arr.length -i-1] = temp;
}

数组的反转方式2:

for(int i = 0,j = arr.length - 1;i<j;i++,j--){String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}

数组的查找:
①线性查找:

String dest = "BB";
for(int i = 0; i<arr.length ; i++){if(dest.equals(arr[i])){System.out.println("找到了指定位置的元素,位置为:"+i);
isFlag = false;
break;
}
}
if(isFlag){System.out.println("很遗憾,没有找到哦!");
}

②二分法查找:
//前提:所要查找的数组必须有序

//3.二分法查找

   int[] arr2 = new int[] {-98,-34,2,34,54,66,79,105,210,333};int dest = -34;int head = 0;//初始索引值int end = arr2.length - 1;//初始的末索引boolean isFlag = true;while(head<=end) {int middle = (head+end)/2;if(dest == arr2[middle]) {System.out.println("找到了指定位置的元素,位置为: "+middle);isFlag = False;break;}else if(arr2[middle]>dest) {end = middle-1;}else {head = middle + 1;}}if(isFlag) {System.out.println("很遗憾,没有找到!");}

Java学习 第三章 数组(二)多维数组相关推荐

  1. Java学习 第三章 数组(三)排序算法

    ** Java学习 第三章 数组(三)排序算法 ** 主要内容:排序算法.排序算法横向比较.Arrays工具类的使用.数组常见异常 1.数组中涉及到的常见算法:排序算法 1.1 排序算法分类:内部排序 ...

  2. Java学习 第三章 数组(一)一维数组

    第三章 数组 3-1 数组的概述 数组:多个相同类型数据按一定的顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理. 数组相关概念: 数组名.下标(索引.角标).元素.数组的长 ...

  3. JAVA学习 第三章作业

    1.程序填空题: 定义一个抽象类Person,其中有一个公共的抽象方法showInfo().然后定义此抽象类的一个子类Student,包括的成员变量有姓名.学号.班级和年龄,且此类中包括两个构造方法. ...

  4. Java学习 第三章 Steam输入输出流

    Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类 ...

  5. java学习(37):二维数组

    /4 利用嵌套循环完成以下二维数组的遍历,体会二维数组或多维数组元素的遍历方法及每个维数数组元素的下标特点./ import java.util.Scanner; public class test0 ...

  6. 【JAVA SE】第五章 数组、多维数组和Arrays类

    第五章 数组.多维数组和Arrays类 文章目录 第五章 数组.多维数组和Arrays类 一.数组 1.概述 2.声明数组变量 3.创建数组 4.For-Each 循环 二.多维数组 1.概述 2.多 ...

  7. 深入理解java虚拟机gc_jvm GC收集器与内存分配(深入理解java虚拟机第三章)

    jvm GC收集器与内存分配(深入理解java虚拟机第三章) 本篇是<深入理解java虚拟机第三章>的笔记记录. 一 为什么要关注GC和内存分配? 需要排查各种内存溢出.内存泄漏问题时,或 ...

  8. 深度学习 第三章 tensorflow手写数字识别

    深度学习入门视频-唐宇迪 (笔记加自我整理) 深度学习 第三章 tensorflow手写数字识别 1.tensorflow常见操作 这里使用的是tensorflow1.x版本,tensorflow基本 ...

  9. Java算法--第三章--排序(14)概述

    Java算法–第三章–排序(14)概述 排序算法的总结: 一.基础排序-----算法评估等级:O(n²) 1.冒泡 谁大谁上,每一轮都把最大的顶到天花板效率太低O(n2)–掌握swap 2.选择排序, ...

最新文章

  1. 学做三件事、三句话、三乐、三不要
  2. Linux笔记-手动配置yum及光盘安装rz
  3. Block代码块中使用局部变量注意点
  4. cad加载dll_关于CAD三维建模的35个问题
  5. 【答辩问题】计算机专业本科毕业设计答辩需注意的内容
  6. Android Bmob之用户更改头像(上传图片、下载图片和更新图片)
  7. 删除烦人的微软拼音输入法
  8. 关于SI (系统集成)
  9. 高考计算机会考等级划分标准,学考等级划分标准
  10. ADF 入门教程(1)
  11. 泰裤辣!五一烧烤倒计时,还有人没做好攻略吗?
  12. Android 插件化之—— 加载插件中的资源
  13. [综][PDPTW]A survey on pickup and delivery problems
  14. SATA接口的硬件基础知识
  15. Spring boot 整合Neo4j 实现动态Cypher
  16. 中职计算机网络技术教学大纲,中职中专学校《计算机网络基础》教学大纲.doc...
  17. BSCI—8-(1):OSPF的特殊区域类型与配置(末节与完全末节区域)
  18. 【BlazePose】《BlazePose: On-device Real-time Body Pose tracking》
  19. web应用程序开发,前端网页设计培训
  20. 编辑器之——Sublime Text3、Notepad++

热门文章

  1. 我如何向团队解释依赖注入
  2. JMeter:负载测试关系数据库
  3. 使用Spring AOP进行面向方面的编程
  4. Linux 命令之 who -- 打印当前登录用户/显示目前登入系统的用户信息。
  5. Java的子类可以继承父类的私有变量和私有方法吗?
  6. Linux 命令之 chmod -- 改变文件或目录权限
  7. js如何监听元素事件是否被移除_JavaScript 监听元素是否进入/移出可视区域
  8. 快速排序 动图_Java十大排序算法最强总结
  9. 计算机系统是连续系统,连续系统的计算机模拟
  10. java 运行os文件路径_Java获取文件路径的几种方式