Java学习 第三章 数组(二)多维数组

多维数组的使用
在这里插入图片描述

由数组构成的数组

二维数组:
① 二维数组的声明和初始化
② 如何调用数组的指定位置的元素
③ 如何获取数组的长度
④ 如何遍历数组
⑤ 数组元素的默认初始化值 :见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("很遗憾,没有找到!");}

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

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

相关文章

Spring Boot 2中的功能切换

无论您是否喜欢&#xff0c;软件开发都是一项协作活动。 整合工作一直被妖魔化&#xff0c;并被视为必不可少的邪恶。 有几种方法可以解决有效集成的挑战。 功能切换开关属于该组。 在本文中&#xff0c;您将在实践中看到如何在Spring Boot应用程序中使用功能切换&#xff08;也…

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

** Java学习 第三章 数组&#xff08;三&#xff09;排序算法 ** 主要内容&#xff1a;排序算法、排序算法横向比较、Arrays工具类的使用、数组常见异常 1.数组中涉及到的常见算法&#xff1a;排序算法 1.1 排序算法分类&#xff1a;内部排序和外部排序 1.2 十大内部排序算…

【强化学习】一些网站整理

莫烦教程 https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/ 博客园&#xff1a;刘建平Pinard https://www.cnblogs.com/pinard/category/1254674.html Deep-Q-Network 学习笔记 https://www.cnblogs.com/cjnmy36723/p/7017549.html 强化学习到深度强…

xmx java_为什么我的Java进程比Xmx消耗更多的内存?

xmx java你们有些人去过那里。 您已经在启动脚本中添加了-Xmx选项&#xff0c;并放松了下来&#xff0c;因为您知道Java进程将不会消耗比经过微调的选项所允许的更多的内存。 然后&#xff0c;您感到非常讨厌。 要么自己检查开发/测试框中的过程表&#xff0c;要么事情真的变坏…

卫星通信系统概述

卫星通信系统指通过在轨人造卫星作为中继站对无线电信号进行转发&#xff0c;实现地面及空间等用户之间信息传输的系统。卫星通信系统组成包括空间段及地面段&#xff0c;系统组成如图所示。其中空间段主要指在轨卫星、对在轨卫星进行操控的地面站&#xff0c;这些地面站主要实…

ElasticSearch初学者教程

1.简介 在此示例中&#xff0c;我们将演示如何使用Elasticsearch &#xff0c; Elasticsearch是一个基于Apache Lucene的分布式自由文本搜索和分析数据库引擎&#xff0c;具有一个基于maven的简单Java客户端。 在撰写本文时&#xff0c;我们将使用最新版本的Elasticsearch&…

博弈论与纳什均衡

三十分钟理解博弈论“纳什均衡” – Nash Equilibrium https://blog.csdn.net/xbinworld/article/details/50932559 纳什均衡(Nash equilibrium)及经典案例 https://blog.csdn.net/u010420283/article/details/83927742 论文&#xff1a; [1] 刘帅军. 卫星通信系统中动态资源…

Opnet入门

一、opnet快速入门 1.系统界面&文件菜单说明 2.常用文件名后缀及描述 3.Opnet建模层次 用户只有一种节点域模型 三、 OPNET Modeler网络仿真机制 1.事件的属性 每次点击next会出现以下界面&#xff1a; 2.事件的执行 调度型&#xff1a;按照正常程序调度事件 强制性&…

JSON的JUnit Hamcrest Matcher

这篇文章展示了如何编写JUnit测试来检查对象是否与JSON字符串匹配。 如果您要实现REST服务并想测试您的服务是否产生了预期的JSON响应&#xff0c;那么这一点很重要。 JSONassert是比较JSON对象的有用库。 首先&#xff0c;您必须将Java对象转换为JSON字符串&#xff08;例如&…

Python列表推导式

列表推导式 是Python构建列表&#xff08;list&#xff09;的一种快捷方式,可以使用简洁的代码就创建出一个列表&#xff0c;即循环创建列表. for可以用来创建列表&#xff0c;列表推导式就相当于是for循环的简化版 1. 最简单的情况 values [10, 21, 5, 7, 12] squares [] …

一些python函数及其用法

1.np.ravel&#xff08;&#xff09;方法 ravel是将数组维度拉成一维数组&#xff0c;也就是将矩阵向量化 x np.array{ [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] } print(np.ravel(x))输出 [ 1 2 3 4 5 6 ]2.b a[np.newaxis,:] import numpy as np a np.arange(0, 10) print(a…

使用Spring WebFlux进行操作

Spring Boot 2.0最近在GA上线了&#xff0c;所以我决定在相当长一段时间内写我的第一篇有关Spring的文章。 自发布以来&#xff0c;我已经看到越来越多的提到Spring WebFlux以​​及有关如何使用它的教程。 但是&#xff0c;在阅读完它们并尝试使它们自己工作之后&#xff0c;我…

【强化学习】Policy Gradient原理

1.Policy Gradient和DQN系列强化算法最大的区别在于&#xff1a; DQN系列基于Value&#xff0c;也就是说执行完所有的动作并保存所得到的价值&#xff0c;根据这些价值计算出最优价值函数&#xff0c;并以此选择动作&#xff0c;最终获得一个特定的策略。 Policy Gradient基于策…

ajax的url怎么将后缀补上_蜂蜜杏仁怎么做?杏仁和蜂蜜腌制方法

蜂蜜杏仁怎么做?杏仁和蜂蜜腌制方法蜂蜜杏仁是一种非常好吃的小零食&#xff0c;很多小可爱都喜欢吃蜂蜜杏仁。不过有些时候忘记补货&#xff0c;就会断粮&#xff0c;于是大家都想要在家里自制蜂蜜杏仁。不过你知道蜂蜜杏仁应该怎么做吗?蜂蜜杏仁的做法其实并不难&#xff0…

【强化学习】Policy Gradients代码注释版本

import gym # import tensorflow as tf import numpy as np# Hyper Parameters GAMMA 0.95 # discount factor 折扣因子 LEARNING_RATE 0.01 # 学习率class Policy_Gradient():# 咱们来搞一下大头&#xff01;def __init__(self, env): # 初始化# 先初始化一些参量sel…

c语言构建栈_选择技术栈构建通用平台

c语言构建栈Java社区中有许多关于Spring vs Java EE的话题。 一群人会争辩说您应该使用一个而不是其他。等等。当我看到这一点时&#xff0c;我不禁要想为什么我们不能同时使用它们呢&#xff1f; 实际上&#xff0c;我认为有效地使用它们将为建立基础架构创建一个伟大的技术堆…

【强化学习】Actor Critic原理

PG算法是一种只基于policy的一种方法&#xff0c;存在的问题就是该算法需要完整的状态序列&#xff0c;且单独对策略函数进行迭代更新&#xff0c;不太容易收敛。 Actor-critic方法呢是一种将 策略(Policy Based)和价值(Value Based)相结合的方法。下面继续来理一下AC方法的思路…

Java 9:对Process API的增强

Java 9对Process API进行了各种改进&#xff0c;用于控制和管理操作系统进程。 获取有关流程的信息 有一个新的ProcessHandle类&#xff0c;提供了进程的pid&#xff0c;父级和后代&#xff0c;以及有关开始时间和累积CPU时间的信息。 jshell> Process p new ProcessBui…

【强化学习】AC注释版本

## 强化学习 Actor-critic # 和PG比起来主要的变化&#xff1a; # 评估点由状态价值变成了TD_error,网络形式变了 # learn函数长得不一样 # action有一个优化函数&#xff0c;优化的是价值函数&#xff0c;希望最大化期望的reward&#xff0c;Critic网络也有一个reward&#xf…

python中sorted的用法append_Python中高阶函数sorted()用法

在Python中&#xff0c;有内置的排序方法&#xff1a;sorted(iterable, key, reverse)。Sorted()函数也是一个高阶函数&#xff0c;它还可以接收一个key函数来实现自定义的排序。key指定的函数将作用于list的每一个元素上&#xff0c;并根据key函数返回的结果进行排序。print(s…