c++ 三维数组 初始化_013 JAVA 多维数组及数组的拷贝、冒泡排序、二分法查找...

1.多维数组

多维数组的元素又是数组,可以有二维、三维、甚至更多维数组

1.1二维数组的声明:

数据类型 [][] = new 数据类型[一维长度][二维长度]

public class Test01 {public static void main(String[] args) {//一维数组的静态初始化  数据类型[] 数组名 = {值1,值2,...};int [] arr1 = {11,22,33,44};int [] arr2 = new int[4];arr2[0] = 44;arr2[1] = 33;arr2[2] = 22;arr2[3] = 11;System.out.println("arr1:"+arr1+"tarr2:"+arr2);//二维数组int [][] arrA= new int[2][];arrA[0] = arr1;//引用arrA[1] = arr2;System.out.println("arrA:"+arrA);}
}

1.2 二维数组的初始化:(动态初始化和静态初始化)

public class Test02 {public static void main(String[] args) {//二维数组不是规则的矩阵//二维数组的静态初始化    数据类型[][] 数组名 = new{{值1,值2,...},{值1,值2,...},{值1,...}...}int [][] arrA = {{1,2},{12,13,14},{1,2,3,4,5}};System.out.println(arrA);//声明一个二维数组,存储3个一维数组,每个一维数组长度不清楚int [] arrB[] = new int[3][];arrB[0] = new int[2];//  2个  nullarrB[1] = new int[]{1,2,3,4};arrB[2] = new int[3];System.out.println(arrB);//声明一个二维数组,同时创建出一维数组,每个一维数组长度相同int arrC[][] = new int[3][4];//存储3个一维数组,每个一维数组长度为4System.out.println(arrC);}
}

1.3 数组的遍历:

1)普通for循环

2)加强for循环

3)普通for循环+加强for循环

public class Test03 {public static void main(String[] args) {int [][] arrA = {{1,2},{2,3,4},{1,2,3,4,5}};//普通for循环for(int i=0;i<3;i++) {for(int j=0;j<arrA[i].length;j++) {System.out.print(arrA[i][j]+"t");}System.out.println();}System.out.println("--------####----------------");//加强for循环for(int[] arr:arrA) {for(int i:arr) {System.out.print(i+"t");}System.out.println();}System.out.println("-----------****--------------");//普通for循环与加强for循环混搭for(int[] arr:arrA) {//加强forfor(int i=0;i<arr.length;i++) {//普通forSystem.out.print(i+"t");}System.out.println();}System.out.println("===================&*&========");//for(int i=0;i<arrA.length;i++) {//普通forfor(int j:arrA[i]) {//加强forSystem.out.print(j+"t");}System.out.println();}}
}

1.4 数组的实例实现:(杨辉三角)---------数组及循环嵌套

public class YangHui {public static void main(String[] args) {int [][] arr = new int[6][6];for(int i=0;i<arr.length;i++) {arr[i][0] = 1;//第一列数字为1arr[i][i] = 1;//对角线元素为1}//其它各元素的值for(int i=2;i<arr.length;i++) {
//			for(int j=1;j<arr.length;j++) {for(int j=1;j<arr[i].length;j++) {arr[i][j] = arr[i-1][j] + arr[i-1][j-1];}}//遍历数组,进行打印for(int i=0;i<arr.length;i++) {
//			for(int j=0;j<arr[i].length;j++) {for(int j=0;j<i;j++) {System.out.print(arr[i][j]+"t");}System.out.println();}}
}

1.5 数组存储表格数据

public class Person {private String name;private int age;private char sex;//构造函数public Person(String name, int age, char sex) {super();this.name = name;this.age = age;this.sex = sex;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn name+"t"+age+"t"+sex;}public static void main(String[] args) {//创建Person类型的数组,用于存储3个Person类型的对象,用于封装信息Person[] pers = new Person[3];//创建Person类的对象Person p1 = new Person("张三",37,'男');pers[0] = p1;//将p1对象存储到Person类型的数组中去pers[1] = new Person("王五",16,'男');pers[2] = new Person("李梅",15,'女');for(int i=0;i<pers.length;i++) {System.out.println(pers);//对象数组中存储的是对象的引用(内存地址)System.out.println(pers[i]);}}}

内存分析:

cfaae48f6d6114ddb0726cb95920267b.png

1.6 数组的拷贝

在System类里也包含了一个

static void arraycopy(object src,int srcpos,object dest, int destpos,int length)方法,

该方法可以将src数组里的元素值赋给dest数组的元素,其中srcpos指定从src数组的第几个元素开始赋值,length参数指定将src数组的多少个元素赋给dest数组的元素

public class Test03 {public static void main(String[] args) {int [] arrA = {11,22,33,44};int [] arrB = new int[5];System.out.println("数组拷贝之前:");for(int num:arrB) {System.out.print(num+"t");}System.arraycopy(arrA, 0, arrB, 0, 4);System.out.println("n数组拷贝之后:");for(int num:arrB) {System.out.print(num+"t");}}
}

另外,数组的拷贝方法还有:

a.引用(地址)的拷贝

public class Test01 {public static void main(String[] args) {int[] arrA ={11,22,33,44};int [] arrB = new int[5];//拷贝地址(引用)之前System.out.println("拷贝之前:");System.out.println("arrA:"+arrA);System.out.println("arrB:"+arrB);//拷贝地址之后arrB = arrA;System.out.println("拷贝之后:");System.out.println("arrA:"+arrA);System.out.println("arrB:"+arrB);}}

2d81c8cc66b6f170977130334818ba3f.png

b. 值的拷贝

public class Test02 {public static void main(String[] args) {int [] arrA = {11,22,33,44};int [] arrB = new int[5];//赋值
//		arrB[0] = arrA[0];
//		arrB[1] = arrA[1];
//		arrB[2] = arrA[2];
//		arrB[3] = arrA[3];System.out.println("赋值之前:");for(int i=0;i<arrB.length;i++) {System.out.print(arrB[i]+"t");}//赋值int length = Math.min(arrA.length,arrB.length);for(int i=0;i<length;i++) {arrB[i] = arrA[i];}System.out.println("n赋值之后");for(int i=0;i<arrB.length;i++) {System.out.print(arrB[i]+"t");}}
}

22469fad8700f370b1070449bfb04753.png

716406ba27e0c4cbcc171c1f5f02d8a9.png

c. Arrays.copyOf方法,如下:

1.7 java.util.Arrays类

在java.util.Arrays类中,包含了常用的数组操作(排序、查找、填充、打印内容等)

package com.sxt.arrays;import java.util.Arrays;public class Test01 {public static void main(String[] args) {int[] arrA = {11,16,6,154,36};int[] arrB = {11,16,6,154,36};//Arrays.toString  打印数组元素System.out.println(Arrays.toString(arrA));System.out.println("------------------------");System.out.println(arrA.equals(arrB));//比较引用地址//Arrays.equals   比较内容是否一致System.out.println(Arrays.equals(arrA,arrB));//比较内容System.out.println("=========================");int [] arrC = new int[5];System.out.println("拷贝前:"+arrC);System.out.println("-------------------------");//Arrays.copyOf  开辟新的数组来复制指定的数组arrC = Arrays.copyOf(arrA, 7);System.out.println("拷贝后:"+arrC);System.out.println(Arrays.toString(arrC));System.out.println("=========================");//Arrays.fill  将数组中所有元素都已指定元素填充Arrays.fill(arrC, 88);System.out.println(Arrays.toString(arrC));System.out.println("--------------------------");//sort   将数组中元素按照升序进行排序Arrays.sort(arrA);System.out.println("arrA的升序排列:"+Arrays.toString(arrA));System.out.println("==============");int [] arr = {5,13,19,21,37,56,64,75,80,88,92};//折半查找并返回找到元素的下标;未找到则返回值(-插入点-1)System.out.println(Arrays.binarySearch(arr,21));System.out.println("                   ");//对Person类型的数组进行排序Person [] pers = new Person[3];pers[0] = new Person("张弎",29,'男');pers[1] = new Person("张大",19,'女');pers[2] = new Person("张五",49,'男');System.out.println("按照年龄的升序排列:");Arrays.sort(pers);for(Person p:pers) {System.out.println(p);}}
}class Person implements Comparable<Person> {private String name;private int age;private char sex;//构造函数public Person(String name, int age, char sex) {super();this.name = name;this.age = age;this.sex = sex;}@Overridepublic String toString() {return name+"t"+age+"t"+sex;}@Overridepublic int compareTo(Person o) {//大于 正数,小于负数,等于0return this.age -o.age ;}
}

5fde25b9927026611523494d4413de84.png

2. 冒泡排序及冒泡排序的优化

2.1冒泡排序算法大致思路:

1. 比较相邻的元素。如果第一个比第二个大,就交换顺序;

2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数;

3. 每一趟循环都从数列的第一个元素开始比较,依次比较相 邻的两个元素,比较到数列的最后;

4. 循环往复,即可得到升序的数组。

图示:

bbc3d891e25db1635a56fefd592d3257.png
package com.sxt.bubble;import java.util.Arrays;//冒泡排序
public class Bubble01 {public static void main(String[] args) {int [] arr = {45,13,56,94,16,2,90};System.out.println("排序前:"+Arrays.toString(arr));for(int i=0;i<arr.length-1;i++) {//比较的轮数for(int j=0;j<arr.length-1;j++) {//相邻两数比较if(arr[j]>arr[j+1]) {//通过变量交换int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}System.out.println("排序后:"+Arrays.toString(arr));}
}

f039b01350700106d62537970034fdec.png

2.2 冒泡排序的优化算法

将整个数组分成两部分:有序数列和无序数列,因此:

1.不必每一趟都比较到数组结束,到有序数列即可

2.定义一个 boolean 类型的变量 flag,默认有序 true;发生交换,置为 false,一趟循环结束后,根据 flag 的值判断是否有序,有序,则退出循环

3.设置成员变量,放在大循环外部,不必每次都开辟空间

图例:

bfbd73959d31e6e07a03fe1a2853809e.png
package com.sxt.bubble;import java.util.Arrays;//冒泡排序的优化
public class Bubble02 {public static void main(String[] args) {int [] arr = {2,13,16,56,45,90,94};int temp;boolean flag;int count = 0;System.out.println("排序前:"+Arrays.toString(arr));for(int i=0;i<arr.length-1;i++) {//比较的轮数flag = true;//默认有序count++;//统计比较的次数for(int j=0;j<arr.length-1-i;j++) {//不需要比较到数组的最后,只需要比较到无序部分即可//相邻两数比较if(arr[j]>arr[j+1]) {//通过变量交换temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;flag = false;//数组中的元素无序,发生了交换}}if(flag) {System.out.println(flag);break;//数组有序,退出循环,证明数组有序}}System.out.println("排序后:"+Arrays.toString(arr));System.out.println("一共比较了"+count+"轮");}
}

da0fb5a59526f1f24e721aabfe21e290.png

3.折半查找(二分法)

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

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

相关文章

js工具类

<tr><th>适用范围说明&#xff1a;</th><td colspan"5"> <textarea class"text" id"dtoinstrutcation" name"productScopeDTO.instrutcation" wrap"PHYSICAL" Null"true" rows"2…

自考计算机成绩,自考成绩计算机中是什么意思?

你说电脑是什么意思&#xff1f;计算机等级考试有两种&#xff0c;一种是全国高校计算机水平考试(CCT)&#xff0c;另一种是全国计算机等级考试(NCRE)。你对这两种测试了解多少&#xff1f;1什么是CCT&#xff1f;CCT的全称是“全国高校计算机水平考试”&#xff0c;让人感觉像…

httpservletrequest 设置请求头_请求和常用对象

## 一、主要内容![](https://raw.githubusercontent.com/Cushier/picture-java/master/middle/20190712150414.png)## 二、核心目标理解几个常用对象的意义和作用掌握几种请求的发出方式掌握数据的发送和接收方式掌握跳转方式掌握乱码的解决## 三、请求的方式要访问服务器首先需…

Jmeter文章索引贴

一、基础部分&#xff1a; 使用Jmeter进行http接口测试Jmeter之Http Cookie ManagerJmeter之HTTP Request DefaultsJmeter之逻辑控制器(Logic Controller)Jmeter属性和变量Jmeter组件执行顺序与作用域Jmeter参数化Jmeter关联Jmeter分布式测试Jmeter代理录制脚本Jmeter调试工具-…

from mysql partition select_爬虫(九十九)mysql详解二

**mysql中字段的常见类型: **二进制位 bit(长度)tinyint[(长度)] [有无符号unsigned] [位数低于长度时候是否填充零zerofill] 有符号表示范围-128 ~ 127, 无负号表示范围 0 ~ 255; 可用tinyint(1)来模拟boolean类型; *整型中的长度不做限制用, 仅仅做显示用, 即长度大于位数时候…

服务器训练数据 关闭终端,一文明白使用nohup将服务器训练程序后台运行不关闭+随时通过查看训练情况输出与visdom可视化...

使用nohup将训练程序后台不间断运行随时查看训练情况输出与可视化使用服务器进行远程训练由于笔者经常需要使用服务器进行训练&#xff0c;且有些模型训练起来需要很长的时间&#xff0c;如Mask模型&#xff0c;故经常需要长期跑程序。由于我使用的是ssh登录&#xff0c;因此断…

v-for 获取数组key value_Vue之路 | 05von、vif、vfor

点击左上方“熊吱”关注我们吧&#xff01;1事件监听在开发中&#xff0c;需要监听用户发生的事件&#xff0c;如点击、拖拽、键盘操作等&#xff0c;在Vue中&#xff0c;使用v-on指令绑定事件监听器。v-on的语法糖为&#xff1a;v-on基本操作在下面代码中&#xff0c;使用了v-…

华为:明明的随机数

明明的随机数明明想在学校中请一些同学一起做一项问卷调查&#xff0c;为了实验的客观性&#xff0c;他先用计算机生成了N个1到1000之间的随机整数&#xff08;N≤100&#xff09;&#xff0c;对于其中重复的数字&#xff0c;只保留一个&#xff0c;把其余相同的数去掉&#xf…

c++输出txt格式循环一组数据后换行再循环一次_numpy、pandas以及用pandas做数据分析的案例...

本文也是秦路老师python教程的学习笔记。这篇也是发给超哥看的&#xff1a;很多人说python很简单很好学&#xff0c;也有很多人说python没有java和c的功能强大。但是这都不重要&#xff0c;重要的是我们想学了&#xff0c;想画图也好做数据分析也罢&#xff0c;想学了就直接开始…

国内qq邮箱服务器,qq邮箱的服务器在国内吗(注册qq邮箱的服务器是什么)

2006年11以前的163用户&#xff0c;可以使用pop功能&#xff0c;以后申请的就不行了&#xff0c;楼主要是是后来申请的&#xff0c;你就别指望能用pop功能了&#xff0c;换邮箱吧&#xff0c;gmail.com &#xff0c;或者qq邮箱也可以的。。邮箱地址是有个人喜好起名的&#xff…

python支持向量机回归_机器学习实战-支持向量机原理、Python实现和可视化(分类)...

支持向量机&#xff08;SVM&#xff09;广泛应用于模式分类和非线性回归领域。 SVM算法的原始形式由Vladimir N.Vapnik和Alexey Ya提出。自从那以后&#xff0c;SVM已经被巨大地改变以成功地用于许多现实世界问题。 1.什么是支持向量机&#xff08;SVM&#xff09;&#xff1f;…

ajax保存乱码,Ajax 乱码详细

前面说了 Ajax 乱码的原因&#xff0c;以及解决乱码的示例&#xff0c;下面来个全面的分析。XMLHTTP 返回的数据默认的字符编码是 UTF-8&#xff0c;如果前台页面是 GB2312 或者其它编码数据就会产生乱码。POST 方法提交数据默认的字符编码是 UTF-8&#xff0c;如果后台是 GB23…

gin context和官方context_Go语言gin框架从入门到精通(3)

gin的渲染1 各种数据格式的响应json、结构体、XML、YAML类似于java的properties、ProtoBuf分别对所有数据格式举个列子func main() {r : gin.Default() ​//1. json响应r.GET("/someJSON", func(c *gin.Context) {c.JSON(200,gin.H{"message":"someJS…

JavaScript开发中几个常用知识点总结

最近在做项目的时候自己写了一些JavaScipt代码&#xff0c;于是自己又进行简单的查阅资料整理了一下&#xff0c;发现了如下几个比较有用的知识点&#xff1a; 1、三种声明函数的方式 2、jQuery $(document).ready() 与window.onload的区别 3、location.href 4、获取url中的参数…

cas .net 重定向循环_接口测试平台接入企业cas(一)

cas系统简介提供运营系统的 SSO 和 access control功能。类似百度的UC。CAS 是 Yale 大学发起的一个开源项目&#xff0c;旨在为 Web 应用系统提供一种可靠的单点登录方法&#xff0c;CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。官方网站&#xff1a;https://www.apereo…

虚拟机安装rsync服务器配置,虚拟机安装rsync服务器配置

虚拟机安装rsync服务器配置 内容精选换一换在分布式HA部署场景下&#xff0c;ASCS主备节点通过共享盘实现数据同步。本章节指导用户将ASCS主节点的数据盘绑定给ASCS备节点并为ASCS主备节点绑定浮动IP。已在SAP ASCS主备节点之间进行过相互的SSH跳转操作。绑定共享盘创建浮动IP并…

程序包android.support.annotation不存在_efcore技巧贴也许有你不知道的使用技巧

前言.net 环境近些年也算是稳步发展。在开发的过程中&#xff0c;与数据库打交道是必不可少的。早期的开发者都是DbHelper一撸到底&#xff0c;到现在的各种各样的ORM框架大行其道。孰优孰劣谁也说不清楚&#xff0c;文无第一武无第二说的就是这个理。没有什么最好的&#xff0…

MySql数据库表类型MYISAM与InnoDB的区别

InnoDB与Myisam的六大区别 MyISAM InnoDB 构成上的区别&#xff1a; 每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始&#xff0c;扩展名指出文件类型。 .frm文件存储表定义。 数据文件的扩展名为.MYD (MYData)。 索引文件的扩展名是.MYI…

centos系统云服务器,Centos系统怎么进云服务器

Centos系统怎么进云服务器 内容精选换一换CentOS 7.5版本操作系统的弹性云服务器默认关闭SELinux功能。通过/etc/selinux/config开启SELinux功能后&#xff0c;在输入密码时&#xff0c;会出现无法登录的问题。如果业务需要开启SELinux 功能&#xff0c;请参照本节内容进行配置…

applicationproperties不是小叶子_为何“砂糖桔”是带着叶子出售?原来其中有着“猫腻”,涨知识了...

大家好&#xff0c;我是你们的好朋友童童&#xff0c;生活中不止有眼前的苟且&#xff0c;还有诗和梦想。童童每天都给大家分享有趣实用的小知识&#xff0c;有什么意见或者建议都可以和童童交流&#xff0c;喜欢我们的可以关注呦。一起和童童来看看今天的小知识吧。随着春节的…