Java学习笔记(三)

前言

这个主要就是想记录一个点,就是二维数组保存的元素就是一维数组的地址,这个概念大家都知道了,那么接下来就是我最近写程序发生的一个事情了。

随机打乱一个一维数组

这个程序我相信大家都是会写的,通过randomArr来随机打乱整个数组,之后通过printArr输出即可,那如果把调用循环来打乱数组,并且把打乱的数组储存在二维数组中又会发生什么情况呢。

import java.util.Random;public class Test {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};printArr(randomArr(arr));}//打乱整个数组public static int[] randomArr(int[] arr) {Random r = new Random();for (int i = 0; i < arr.length; i++) {//随机生成两个坐标int pos1 = r.nextInt(arr.length);int pos2 = r.nextInt(arr.length);int tmp = arr[pos1];arr[pos1] = arr[pos2];arr[pos2] = tmp;}return arr;}//输出整个数组public static void printArr(int[] arr) {System.out.print("[");for (int i = 0; i < arr.length; i++) {if (i != arr.length - 1) {System.out.print(arr[i] + ",");} else {System.out.print(arr[i]);}}System.out.println("]");}
}

 随机打乱二维数组里面的一维数组

import java.util.Random;public class Test {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};int[][] res = new int[5][arr.length];for (int i = 0; i < res.length; i++) {//后面打乱依赖前面打乱生成的res[i] = randomArr(arr);printArr(randomArr(arr));}}//打乱整个数组public static int[] randomArr(int[] arr) {Random r = new Random();for (int i = 0; i < arr.length; i++) {//随机生成两个坐标int pos1 = r.nextInt(arr.length);int pos2 = r.nextInt(arr.length);int tmp = arr[pos1];arr[pos1] = arr[pos2];arr[pos2] = tmp;}return arr;}//输出整个数组public static void printArr(int[] arr) {System.out.print("[");for (int i = 0; i < arr.length; i++) {if (i != arr.length - 1) {System.out.print(arr[i] + ",");} else {System.out.print(arr[i]);}}System.out.println("]");}
}

程序运行结果如下:

[5,4,9,6,1,8,3,2,7]
[7,1,4,5,2,8,9,3,6]
[7,3,2,5,6,1,8,9,4]
[7,5,3,1,8,6,2,4,9]
[3,9,4,8,7,6,5,1,2]

理论上也确实是这个结果,但是此时res数组里面的元素呢?

import java.util.Random;public class Test6 {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int[][] res = new int[5][arr.length];for (int i = 0; i < res.length; i++) {//后面打乱依赖前面打乱生成的res[i] = randomArr(arr);}//打印resfor (int i = 0; i < res.length; i++) {printArr(res[i]);}}//打乱整个数组public static int[] randomArr(int[] arr) {Random r = new Random();for (int i = 0; i < arr.length; i++) {//随机生成两个坐标int pos1 = r.nextInt(arr.length);int pos2 = r.nextInt(arr.length);int tmp = arr[pos1];arr[pos1] = arr[pos2];arr[pos2] = tmp;}return arr;}//输出整个数组public static void printArr(int[] arr) {System.out.print("[");for (int i = 0; i < arr.length; i++) {if (i != arr.length - 1) {System.out.print(arr[i] + ",");} else {System.out.print(arr[i]);}}System.out.println("]");}
}

程序运行结果如下:

[2,7,4,3,9,6,8,5,1]
[2,7,4,3,9,6,8,5,1]
[2,7,4,3,9,6,8,5,1]
[2,7,4,3,9,6,8,5,1]
[2,7,4,3,9,6,8,5,1]

此时会发现,二维数组的输出结果都是一样的,通过打印地址会发现,输出的地址都是一致的。

于是我们很快的可以想到,方法传递数组是传递的地址值,也就是最终我们在原数组中进行了修改,然后返回他,res数组里面的元素就都是arr,所以最终的值是一样的,那么我们又该如何解决呢?

可以对返回的数组重新给他开辟一片空间即可。(注意最后拷贝的时候不能是直接用数组名进行赋值,用数组名最终是将新创建的数组指向传进来的那个数组,我们需要的是拷贝每一个元素)

import java.util.Random;public class Test {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};int[][] res = new int[5][arr.length];for (int i = 0; i < res.length; i++) {//后面打乱依赖前面打乱生成的res[i] = randomArr(arr);}//打印resfor (int i = 0; i < res.length; i++) {printArr(res[i]);}}//打乱整个数组public static int[] randomArr(int[] arr) {Random r = new Random();int []res=new int[arr.length];for (int i = 0; i < arr.length; i++) {//随机生成两个坐标int pos1 = r.nextInt(arr.length);int pos2 = r.nextInt(arr.length);int tmp = arr[pos1];arr[pos1] = arr[pos2];arr[pos2] = tmp;}//拷贝元素,不能直接用res=arr;for (int i = 0; i < arr.length; i++) {res[i]=arr[i];}return res;}//输出整个数组public static void printArr(int[] arr) {System.out.print("[");for (int i = 0; i < arr.length; i++) {if (i != arr.length - 1) {System.out.print(arr[i] + ",");} else {System.out.print(arr[i]);}}System.out.println("]");}
}

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

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

相关文章

棒球俱乐部青少年成长体系·棒球1号位

棒球俱乐部青少年成长体系介绍 1. 培养理念 简要介绍棒球俱乐部的宗旨和培养青少年的目标 棒球俱乐部是一个致力于培养青少年棒球运动员的体育组织&#xff0c;其宗旨是通过提供专业的棒球训练和比赛机会&#xff0c;帮助青少年提高身体素质、培养团队合作精神和塑造积极向上…

【vue会员管理系统】篇三之自定义Axios、初试后台接口、跨域问题

一、自定义封装Axios异步对象和添加拦截器 因为本项目很多组件需要通过Axios发送一步请求&#xff0c;所以封装Axios对象&#xff0c;自己封装的Axios在后续可以使用axios中提供的拦截器。 1.在src文件夹下创建utils文件夹&#xff0c;再在utils文件夹下创建request.js文件 2.…

改善游戏体验:数据分析与可视化的威力

当今&#xff0c;电子游戏已经超越了娱乐&#xff0c;成为一种文化现象&#xff0c;汇聚了全球数十亿的玩家。游戏制作公司正采用越来越复杂的技术来提高游戏质量&#xff0c;同时游戏数据分析和可视化工具变得不可或缺。 数据的力量&#xff1a;解析游戏体验 游戏制作涉及到大…

Kubernetes技术与架构-网络 3

Kubernetes集群支持为Pod或者Service申请IPV4或者IPV6的地址空间。 kube-apiserver --service-cluster-ip-range<IPv4 CIDR>,<IPv6 CIDR> kube-controller-manager --cluster-cidr<IPv4 CIDR>,<IPv6 CIDR> --service-cluster-ip-range<IPv4 CI…

Java爬虫实战:API商品数据接口调用

一、引言 随着互联网的发展&#xff0c;越来越多的商家开始将自己的商品数据通过API接口对外开放&#xff0c;以供其他开发者使用。这些API接口可以提供丰富的商品数据&#xff0c;包括商品名称、价格、库存、图片等信息。对于Java爬虫开发者来说&#xff0c;通过调用这些API接…

特约|数码转型思考:Web3.0与银行

日前&#xff0c;欧科云链研究院发布重磅报告&#xff0c;引发银行界及金融监管机构广泛关注。通过拆解全球70余家银行的加密布局&#xff0c;报告认为&#xff0c;随着全球采用率的提升与相关技术的成熟&#xff0c;加密资产已成为银行业不容忽视也不能错过的创新领域。 作为…

YOLOv5源码中的参数超详细解析(3)— 训练部分(train.py)| 模型训练调参

前言:Hello大家好,我是小哥谈。YOLOv5项目代码中,train.py是用于模型训练的代码,是YOLOv5中最为核心的代码之一,而代码中的训练参数则是核心中的核心,只有学会了各种训练参数的真正含义,才能使用YOLOv5进行最基本的训练。🌈 前期回顾: YOLOv5源码中的参数超详细解析…

Redis | 数据结构(01)

这里写自定义目录标题 Redis 速度快的原因除了它是内存数据库&#xff0c;使得所有的操作都在内存上进行之外&#xff0c;还有一个重要因素&#xff0c;它实现的数据结构&#xff0c;使得我们对数据进行增删查改操作时&#xff0c;Redis 能高效的处理。 因此&#xff0c;这次我…

hibernate源码(2)--- springboot-jpa是如何引入的

starter引入 要想看jpa是如何将hibernate引入容器&#xff0c;首先要看的是 spring-boot-starter-data-jpa 如何引入依赖&#xff1a; 如果注意的话&#xff0c;starter的包内容其实没有什么实质的内容&#xff0c;关键是pom里的依赖 pom中规定了各依赖和依赖的版本&#xf…

Kernel: network:问题分析一例,包从二层到了三层,却没有到四层

现象&#xff0c;使用tcpdump命令可以抓到进来的包&#xff0c;但是使用strace看程序&#xff0c;却没有在socket上收到数据。 通过 nstat/netstat/ip-s/ethtoo-S/看各种计数&#xff0c;发现没有错误的包。 也没看到iptables的设置&#xff1b; 也没有防火墙的设置&#xff1b…

Rabbitmq----分布式场景下的应用

服务异步通信-分布式场景下的应用 如果单机模式忘记也可以看看这个快速回顾rabbitmq,在做学习 消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1.消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一…

深入浅出排序算法之直接插入排序(拓展:折半插入排序)

目录 1. 图示解析 2. 原理解析 3. 代码实现 4. 性能分析 5. 折半插入排序&#xff08;拓展&#xff09; 直接插入排序和选择排序的第一趟就是第一个关键字 &#xff01; 1. 图示解析 2. 原理解析 整个区间被分为&#xff1a;① 有序区间&#xff1b;② 无序区间 每次选…

【Java 进阶篇】Java Request 原理详解

在网络应用开发中&#xff0c;HTTP请求是一项常见而关键的任务。当我们使用Java编写网络应用时&#xff0c;了解HTTP请求的工作原理变得至关重要。本文将详细介绍Java中HTTP请求的原理&#xff0c;包括请求的结构、发送请求的方法以及处理请求的过程。 HTTP请求的基本结构 HT…

模板(模板函数+模板类)

模板&#xff08;模板函数模板类&#xff09; 1.模板1.1 模板出现的原因1.2 函数模板模板函数的定义模板函数的使用方法总结 1.2 类模板使用举例 1.模板 1.1 模板出现的原因 为了代码重用;使重用的代码不受数据类型的限制 把数据类型设计为一个参数&#xff0c;即参数化(par…

二十三种设计模式全面解析-前言

设计模式是前辈们对代码开发经验的总结&#xff0c;用于解决常见的设计问题。它不是语法规定&#xff0c;而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性并且经过验证和优化的解决方案。对于每个开发人员来说&#xff0c;熟悉并理解这些模式是打造高质量、…

nginx+websphere sendRedirect 端口错误

nginxwebsphere sendRedirect 端口错误 问题现象&#xff1a; nginxwebsphere 当在websphere中使用sendRedirect时&#xff0c;会将websphere的端口传递到浏览器 eg: 正确的访问地址为&#xff1a;127.0.0.1 使用sendRedirect后&#xff0c;变为127.0.0.1:9080 解决办法&…

一键同步,无处不在的书签体验:探索多电脑Chrome书签同步插件

说在前面 平时大家都是怎么管理自己的浏览器书签数据的呢&#xff1f;有没有过公司和家里的电脑浏览器书签不同步的情况&#xff1f;有没有过电脑突然坏了但书签数据没有导出&#xff0c;导致书签数据丢失了&#xff1f;解决这些问题的方法有很多&#xff0c;我选择自己写个chr…

2018年亚太杯APMCM数学建模大赛B题人才与城市发展求解全过程文档及程序

2018年亚太杯APMCM数学建模大赛 B题 人才与城市发展 原题再现 招贤纳士是过去几年来许多城市的亮点之一。北京、上海、武汉、成都、西安、深圳&#xff0c;实际上都在用各种吸引人的政策来争夺人才。人才代表着城市创新发展的动力&#xff0c;因为他们能够在更短的时间内学习…

前端面试题10.23

解决的最复杂的前端问题&#xff0c;介绍一下 最复杂的前端问题之一是浏览器兼容性&#xff0c;不同浏览器对网页的渲染方式存在差异&#xff0c;需要针对不同浏览器做兼容性处理。此外&#xff0c;前端性能优化也是一个复杂的问题&#xff0c;需要综合考虑网页加载速度、渲染…