你好,看完你的博客文章,感觉很不错!希望与你网站首页友情链接 流量卡知识网 http://53go.cn/ 专注于移动/联通/电信推出的大流量多语音活动长短期套餐手机卡的相关知识的介绍普及听说互换友情链接可以增加网站的收录量,特此来换,如果同意的话就给internetyewu@163.com[微信ganenboy]发信息或者就在此回复下吧!【建站问题也可以一起讨论!】
你好,看完你的博客文章,感觉很不错!希望与你网站首页友情链接 流量卡知识网 http://53go.cn/ 专注于移动/联通/电信推出的大流量多语音活动长短期套餐手机卡的相关知识的介绍普及听说互换友情链接可以增加网站的收录量,特此来换,如果同意的话就给internetyewu@163.com[微信ganenboy]发信息或者就在此回复下吧!【建站问题也可以一起讨论!】
你好
http://bigota.d.miui.com/V14.0.9.0.TLJCNXM/ingres_images_V14.0.9.0.TLJCNXM_20230323.0000.00_13.0_cn_chinatelecom_aff802bb3e.tgz
已添加贵站友链 Southerly 个人博客 || http://www.southerly.top || https://www.southerly.top/imgs/favicon.ico || 一个正在努力搬砖的兼职程序员,记录生活,分享生活,欢迎大家来访。
目前这种不行了
老哥呀,现在这种方法还能爬到数据嘛?可以聊聊不
https://www.aliyundrive.com/s/5N2bKDVZfxC
https://wwi.lanzoup.com/iU6FZ0o4as1i
04824ADB9F824ADB9F0400824ADB9F000F
https://lihh.lanzouf.com/ij6c80nhq7rg
https://cloud.189.cn/web/share?code=FvuIbuJBnEVr
https://lihh.lanzouf.com/ij6c80nhq7rg
https://developer.aliyun.com/plan/student?taskCode=vmfeitian2023&recordId=5246709&undefined&share_source=copy_link
已加,三天之后检查没加本站链接 就下了
首页
大佬聚集地
欢迎大家
教程分享
每日一看
Search
1
欢迎来到河马博客
41,756 阅读
2
守护者群管小栗子框架下载教程
40,887 阅读
3
烟花模拟器(php)
35,661 阅读
4
外链搜索引擎优化如何发布
13,619 阅读
5
一键搭建表白墙源码+教程
13,255 阅读
软件分享
教程分享
源码分享
游戏攻略
百科知识
SEO课程
登录
Search
标签搜索
推特
升学考试
账号
数学
饺子
笔记本电脑
笔记本
研究生考试
字符
英语
函数
马斯克
笔记本电脑排名前十
操作
初一
联想
考研
广告
注册
账户
河马
累计撰写
7,418
篇文章
累计收到
81
条评论
今日撰写
50
篇文章
首页
栏目
软件分享
教程分享
源码分享
游戏攻略
百科知识
SEO课程
页面
大佬聚集地
欢迎大家
教程分享
每日一看
用户登录
登录
搜索到
1415
篇与
的结果
2023-12-07
满满干货(十大暴力美学游戏)暴力美学画风,暴力美学的终极形态 JAVA Feroce 2评测,java费罗切怎么样,
熟悉JAVA的车友对于“费罗切”Feroce一定不会陌生。自2015年上市以来,Feroce就凭借炫酷的涂装和亲民的价格坐稳了JAVA中高端公路车产品销量的王座。四年后的今天,JAVA Feroce 2开启全新篇章。渐变涂装、气动碟刹、车首隐藏式走线、UCI认证……相比旧款,视觉完成度超高的新款Feroce不再是简单粗暴地价格屠杀,而是野心十足地对标各大品牌顶级车款。看来JAVA又是要搞事情的节奏!市场上对于JAVA品牌的评价褒贬不一,但有一点不可否认:在国产品牌的产品中,JAVA的涂装设计水准是能够排在第一梯队的。纵向来看,Feroce 2也可称为历代Feroce的颜值巅峰。黑红渐变涂装的明暗对比恰到好处地烘托出车架的管型变化之美,设计师在黑色过渡的末端没有采用整体色块,而是以密集点阵图案营造出速度感,一笔跳脱出呆板和俗套。前叉和下管底部的深灰色块看似多余,实则能够与弯把、轮组上的灰色logo相呼应,确保视觉色彩上的平衡。车架上管的J-F2是JAVA Feroce 2的缩写JAVA赞助的Pacific Premier Bank洲际车队所使用的J-Air Feroce Disc公路车的国内版本就是JAVA Feroce 2。因此车架上出现UCI认证logo也就不足为奇。意大利Albertdesign工作室的设计师签名。JAVA从2010年开始便与意大利运动设计工作室Albertdesign 合作。在2016年JAVA委托Albertdesign全权负责新款车型的开发与设计,JAVA Feroce 2便是其中的产物。JAVA Feroce 2完美继承了前代Feroce的设计基因,并在头管、勾爪、走线等方面进行了优化。特别是头首的整合设计,让人眼前一亮。在Feroce 2上,JAVA搭配了一款内走线一体式碳纤维弯把,两根变速线从弯把内走穿过定制的锥形垫圈,通过保持架固定,再从腕组轴承内穿入车架。实测并不会对操控带来干扰。外部的两根刹车线管也采用了热缩管收束,且入线孔均设计在非驱动侧,日常拍照发朋友圈,图片效果显得非常干净。前拨出线口设计在下管,有效避免后轮卷起的泥沙污染变速线,并且减少线管弯折,前拨的变速手感也得到一定的提升。在立管下方,JAVA预留有电变出线孔,便于后续升级。既然是碟刹公路,还留着这玩意就有点迷了。或许设计师是为了追求侧向刚性特意保留。这款Juin线拉油碟是整车配置中很有意思的一处。夹器双边制动,采用阴阳脸涂装,左右两侧一边是哑光、一边是亮面。金属摇臂在细节打磨上非常精致。美中不足的是制动手感偏“肉”,尤其是末段刹车,即便捏到底手指还是能感到一点弹性余量,不够干净利落。个人建议既然整车已经计划对标中高端产品,完全没必要在这些关乎体验的地方省成本,很多时候便宜就是贵。笔者看到这对50mm碟刹碳刀时的第一反应是:JAVA终于开窍了!如果你也曾体验过JAVA那标志性的大铝刀,那你一定知道我在说什么。这对DECAF碟刹碳纤维轮组采用时下流行的胖圈设定,不仅拥有优异的气动稳定效果,搭配马牌ULTRASPORT 25C外胎,也为整车舒适性加分不少。前后均采用的是160mm规格TRP中锁碟片,边缘截面处理圆滑,走心了。同样走心的还有那骚红俏皮的阳极气嘴帽。套件方面同样延续了历代Feroce的混搭风格,手变、前拨、后拨为Shimano R7000,浩盟牙盘、KMC链条,飞轮即便深藏不露,但根据一些极限状况下的变速反馈,还是能够判断出是第三方品牌的产品。对于零配件的选择,厂方考虑的因素要更加复杂,例如货款、库存、交期、品控、厂家配合度、以及这个月是否和对方老板喝过酒……但对于车友来说,只在乎两点:第一是否好用,第二是否好卖。这便是问题所在。骑行感受如果说“船新版本”的涂装只是表面文章,那么车架细节以及零部件的优化所带来的响应速度以及舒适性的提升则是实打实的硬功夫。紧凑型后三角、396mm超短RC赋予Feroce激进快热的基因。与旧款的大铝刀相比,装载DECAF碳刀的Feroce在起步脚感和上有质的飞跃,力随心动,虽称不上凌厉,但也绝不拖泥带水。同时碳圈、宽胎、碳把所带来的舒适性在应对中大幅度的路面时也十分奏效。相比于旧款Feroce,那种差异感就像是一匹狂暴的野马突然被驯服,通了人性。需要注意的是,新款Feroce的几何相当激进,STR比值为1.3,好在原装搭配的碗组盖和三个锥形垫圈加起来累计抬升有45mm。因此车友们在购买时千万不要相信所谓的买小不买大,如果有条件还是先去做一下FITTING再来考虑。JAVA似乎特别钟情于气动车架,无论是鱼雷、火、还是费罗切,都能找到气动设计的影子。随着速度的提升,Feroce的气动增益开始显现,那种感觉就像是在大集团里偷懒摸鱼,只需稍稍加脚就能轻松维持巡航惯性,为最后的终点冲刺蓄能。值得一提的是,JAVA的这根一体式碳纤维弯把上把位握持比预想中的要更加稳定和舒适,以低趴姿势巡航时,微微上掠的上翼面能给予手臂很好的支持。美中不足的是下把位摇车冲刺时,弯把会与手腕干涉;以及弯把的刚性非常差,形变量巨大。对于碟刹公路,是否会蹭碟是大家关注的重点,很遗憾,在这辆Feroce没有躲过蹭碟魔咒。前端侧向刚性不足是这款车最大的短版,尤其是在高速压弯时,Feroce无法给到笔者一辆顶级战车应有的踏实感。所以,Pacific Premier Bank洲际车队的战车是经过了“特别关照”?美骑点评优点:涂装帅气、外形时尚,市面上顶级公路车的元素基本具备。起步加速敏锐、轮组气动增益显著,与旧款相比,新款整车舒适性有很大提升。不足:对标同级别竞品,零件混搭略显小气;前端侧向刚性不足;一体把刚性太差。在这台车上能看到JAVA的一些转变,有槽点,也有肯定。Feroce从2015年诞生至今,终于迎来了它的终极形态。这也让我很期待下一代Feroce会是什么样子。
2023年12月07日
0 阅读
0 评论
0 点赞
2023-12-07
一看就会(java中的datetime)java的时间日期类型,Java时间类介绍:Date的使用,java 设置指定日期的0点0分0秒,
在Java中用来表示日期的类有很多,最早使用的应该是Date类。Date类大概有两个,分别是:java.util.Date和java.sql.Date。前者对应我们日常生活中常用的日期类,而后者则表示数据库中使用的日期类。两者区别在于,java.sql.Date虽然继承了java.util.Date, 但是在java.sql.Date中移除了时分秒的概念,也就是说我们无法从java.sql.Date中来获取时分秒。这一点可以从源码中得到证实。下面是java.sql.Date中关于获取时分秒方法的声明: // 获取小时public int getHours() {throw newjava.lang.IllegalArgumentException();}// 获取分public int getMinutes() {throw new java.lang.IllegalArgumentException();}// 获取秒public int getSeconds() {throw newjava.lang.IllegalArgumentException();}可以看到,java.sql.Date对继承自java.util.Date的方法进行了重写,使得java.sql.Date不再支持获取时分秒。当然,即使是java.util.Date, 获取时分秒的方法也已经过时,不再推荐使用。以现在的眼光看来,除了使用Date的默认的构造器来构建一个日期对象外,已经几乎不再使用该类。但是稍微了解一下,和最新的日期类做个对比,才能明白各自的优劣,从而加深理解。常用的静态方法java.util.Date的静态方法如下:public static Date from(Instant instant):根据时刻类来构建java.util.Date对象java.sql.Date的静态方法如下:public static Date valueOf(String s):根据字符来构建java.sql.Date对象public static Date valueOf(LocalDate date):使用Java8新增的LocalDate来构建java.sql.Date对象。示例代码如下所示:public class DateTest {public static void main(String[] args) {// java.util.Date的静态方法Instant now = Instant.now();java.util.Date nowDate = java.util.Date.from(now);System.out.println("获取的java.util.Date对象为:" + nowDate);// java.sql.Date的静态方法java.sql.Date date = java.sql.Date.valueOf("2019-03-12");System.out.println(date);java.sql.Date date2 = java.sql.Date.valueOf(LocalDate.now());System.out.println(date2);}}执行结果如下图所示:构造方法java.util.Date的构造方法如下:public Date():无参构造器。public Date(long date) :传入一个日类型转换为距时间原点(1970年1月1日0时0分0秒)所经过的毫秒数。java.sql.Date的构造方法如下:public Date(long date):传入一个日类型转换为距时间原点(1970年1月1日0时0分0秒)所经过的毫秒数。虽然还有其他的构造参数,都是已经被标记为过时的构造器,因此就不再过多介绍。关于java.util.Date的构造器使用示例代码如下所示:public class DateTest {public static void main(String[] args) {// java.util.Date的构造器java.util.Date date = new java.util.Date();System.out.println("无参构造器构建的java.util.Date对象:" + date);java.util.Date date2 = new java.util.Date(System.currentTimeMillis());System.out.println("带参构造器构建的java.util.Date对象为:" + date2);// java.sql.Date的构造器java.sql.Date date3 = new java.sql.Date(System.currentTimeMillis());System.out.println("带参构造器构造的java.sql.Date对象:" + date3);}}执行结果如下图所示:常用方法以下常用的方法都是java.util.Date和java.sql.Date共有的方法。所以下面的示例代码仅以java.util.Date作为示例。至于java.sql.Date的使用大家类比即可。public boolean before(Date when):判断当前日期是否在传入的日期之前。public boolean after(Date when):判断当前的日期是否在传入的日期之后。public int compareTo(Date anotherDate):比较当前日期和传入日期谁在前谁在后。public void setTime(long time):修改日期的值,入参为距时间原点经过的毫秒值。public long getTime():获取当前日期对象距时间原点经过的毫秒值。public Instant toInstant():将当前的java.util.Date对象变为时刻类表示的对象。关于java.util.Date的常用使用示例代码如下所示:public class DateTest {public static void main(String[] args) {// 当前日期Date date = new Date();// 时间原点Date date2 = new Date(0);// 判断当前日期是否在传入的日期之前System.out.println("date是否在date2之前:" + date.before(date2));// 判断当前的日期是否在传入的日期之后System.out.println("date是否在date2之后:" + date.after(date2));// 比较当前日期和传入日期谁在前谁在后:1表示当前日期在后,0表示两者是同一个日期,-1表示传入日期在后。System.out.println("date和date2谁在前谁在后:" + date.compareTo(date2));// 修改日期的值,入参为距时间原点经过的毫秒值date2.setTime(Duration.ofDays(365).toMillis());System.out.println("date2设置后卫距时间原点1:" + date2);// 获取当前日期对象距时间原点经过的毫秒值System.out.println("date距时间原点经过的毫秒值为:"+ date.getTime());// 将当前的java.util.Date对象变为时刻类表示的对象System.out.println("date2变为时刻类为:" + date2.toInstant());}}执行结果如下图所示:
2023年12月07日
0 阅读
0 评论
0 点赞
2023-12-07
全程干货(java第八章数组的本章作业)java入门数组基础educoder,Java基础——数组,java 二维数组 行列,
一、数组的概念1.数组的定义数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的四个基本特点:1.长度是确定的。数组一旦被创建,它的大小就是不可以改变的。2.其元素的类型必须是相同类型,不允许出现混合类型。3.数组类型可以是任何数据类型,包括基本类型和引用类型。4.数组变量属于引用类型,数组也是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java 中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中存储的。2.数组的创建和初始化2.1数组的声明方式(以一维数组为例):type[ ] arr_name; //方式一(推荐使用这种方式)type arr_name[ ]; //方式二注:1.声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM 才分配空间,这时才与长度有关。2.声明一个数组的时候并没有数组真正被创建。3.构造一个数组,必须指定长度。2.2创建基本类型的一维数组:public class Test {public static void main(String args[ ]) {int[ ] s = null; // 声明数组; s = new int[10]; // 给数组分配空间; for (int i = 0; i < 10; i++) {s[i] = 2 * i + 1;//给数组元素赋值; 数组是对象,数组中的元素就是对象的属性 System.out.println(s[i]);}}}内存图:2.3初始化:数组的初始化方式总共有三种:静态初始化、动态初始化、默认初始化:静态初始化:除了用 new 关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。int [ ] a = { 1, 2, 3 };// 静态初始化基本类型数组;Man[ ] mans = { new Man(1, 1), new Man(2, 2) };// 静态初始化引用类型数组;动态初始化:数组定义与为数组元素分配空间并赋值的操作分开进行。int[ ] a1 = new int[2];//动态初始化数组,先分配空间;a1[0]=1;//给数组元素赋值;a1[1]=2;//给数组元素赋值;数组的默认初始化:数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。int a2[ ] = new int[2]; // 默认值:0,0boolean[ ] b = new boolean[2]; // 默认值:false,falseString[ ] s = new String[2]; // 默认值:null, null二、数组常见操作数组创建后,我们经常需要对数组做两种最常见的操作:遍历、拷贝。遍历指的就是“通过循环遍历数组的所有元素”。拷贝指的是将某个数组的内容拷贝到另一个数组中。 实质上,容器的扩容本质上就是“数组的拷贝”。1.数组的遍历数组元素下标的合法区间:[0, length-1]。可以通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值。示例:使用循环初始化和遍历数组package cn.pxy.test;public class Test {public static void main(String[] args) {int[] a=new int[4];//初始化数组元素的值for(int i=0;i<a.length;i++) {a[i]=100*i;}//获取元素的值for(int i=0;i<a.length;i++) {System.out.println(a[i]);}}}运行结果:2.for-each 循环增强 for 循环 for-each 是 JDK1.5 新增加的功能,专门用于读取数组或集合中所有的元素,即对数组进行遍历。for-each 增强 for 循环在遍历数组过程中不能修改数组中某元素的值。for-each 仅适用于遍历,不涉及有关索引(下标)的操作。例如:使用增强 for 循环遍历数组for-each 循环。package cn.pxy.test;public class Test {public static void main(String[] args) {String[] s= {"aa","bb","cc","dd"};for(String temp:s) {System.out.println(temp);}}}运行结果:3.数组的拷贝System 类里也包含了一个 static void arraycopy(object src,int srcpos,object dest, int destpos,int length)方法,该方法可以将 src 数组里的元素值赋给 dest 数组的元素,其中 srcpos 指定从 src 数组的第几个元素开始赋值,length 参数指定将 src 数组的多少个元素赋给 dest 数组的元素。示例:package cn.pxy.test;public class Test {public static void main(String[] args) {String[] s= {"aa","bb","cc","dd"};String[] sCopy=new String[6];System.arraycopy(s, 0, sCopy, 0, s.length);for(inti=0;i<sCopy.length;i++) {System.out.print(sCopy[i]+"\t");}}}运行结果:4.java.util.Arrays 类JDK 提供的 java.util.Arrays 类,包含了常用的数组操作,方便我们日常开发。Arrays类包含了:排序、查找、填充、打印内容等常见的操作。例如:使用 Arrays 类输出数组中的元素:package cn.pxy.test;import java.util.Arrays;public class Test {public static void main(String[] args) {int[] a= {1,2};System.out.println(a);//打印数组引用的值System.out.println(Arrays.toString(a));//打印数组元素的值}}运行结果:示例:使用 Arrays 类对数组元素进行排序:package cn.pxy.test;import java.util.Arrays;public class Test {public static void main(String[] args) {int[] a= {1,2,33,44,88,99,66,77};System.out.println(Arrays.toString(a));//打印数组元素的值Arrays.sort(a);System.out.println(Arrays.toString(a));//排序后}}运行结果:示例:使用 Arrays 类实现二分法查找法:package cn.pxy.test;importjava.util.Arrays;public class Test {public static void main(String[] args) {int[] a= {1,2,33,44,88,99,66,77};System.out.println(Arrays.toString(a));//打印数组元素的值Arrays.sort(a);//使用二分法查找,必须先对数组排序System.out.println(Arrays.toString(a));//排序后//返回排序后新的索引位置,若未能找到返回负数System.out.println("该元素的索引:"+Arrays.binarySearch(a,66));}}运行结果:示例:使用Arrays类对数组进行填充:package cn.pxy.test;import java.util.Arrays;public class Test {public static void main(String[] args) {int[] a= {1,2,33,44,88,99,66,77};System.out.println(Arrays.toString(a));//打印数组元素的值Arrays.fill(a, 2,4,100);//将2到4索引的元素替换为100System.out.println(Arrays.toString(a));}}运行结果:5.Comparable 接口想对某个类的对象之间做比较,就需要实现 Comparable 接口。接口中只有一个方法compareTo,这个方法定义了对象之间的比较规则。 依据这个“比较规则”,我们就能对所有对象实现排序。事实上,java 中排序算法的底层也依赖 Comparable 接口。Comparable 接口中只有一个方法:public int compareTo(Object obj) obj 为要比较的对象。方法中,将当前对象和 obj 这个对象进行比较,如果大于返回 1,等于返回 0,小于返回-1. (此处的 1 也可以是正整数,-1 也可以是负整数)。三、多维数组1.多维数组多维数组可以看成以数组为元素的数组。可以有二维、三维、甚至更多维数组,但是实际开发中用的非常少,最多到二维数组。示例:二维数组的声明:public class Test {public static void main(String[ ] args) {// Java中多维数组的声明和初始化应按从低维到高维的顺序进行int[ ][ ] a = new int[3][ ];a[0] = new int[2];a[1] = new int[4];a[2] = new int[3];// int a1[ ][ ]=new int[ ][4];//非法}}二维数组的静态初始化:public class Test {public static void main(String[ ] args) {int[ ][ ] a = { { 1, 2, 3 }, { 3, 4 }, { 3, 5, 6, 7 } };System.out.println(a[2][3]);}}内存分配:二维数组的动态初始化:import java.util.Arrays;public class Test {public static void main(String[ ] args) {int[ ][ ] a = new int[3][ ];// a[0] = {1,2,5}; //错误,没有声明类型就初始化a[0] = new int[ ] { 1, 2 };a[1] = new int[ ] { 2, 2 };a[2] = new int[ ] { 2, 2, 3, 4 };System.out.println(a[2][3]);System.out.println(Arrays.toString(a[0]));System.out.println(Arrays.toString(a[1]));System.out.println(Arrays.toString(a[2]));}}运行结果:获取数组长度:package cn.pxy.test;public class Test {public static void main(String[] args) {int[][] a= {{1,2,3},{3,4},{3,5,6,7},{7,8,9,10}};//获取的二维数组第一维数组的长度System.out.println(a.length);//获取第二维第一个数组长度System.out.println(a[0].length);}}运行方式:2.数组存储表格数据表格数据模型是计算机世界最普遍的模型,可以这么说,大家在互联网上看到的所有数据本质上都是“表格”,无非是表格之间互相套用。如下表格是一张雇员表:ID姓名年龄职位入职时间1001张三20前台2019-07-061002李四19总监2020-07-011003胖咸鱼18程序员2021-07-09我们观察表格,发现每一行可以使用一个一维数组存储:Object[ ] a1 = {1001,"张三",20,"前台","2019-07-06"};Object[ ] a2 = {1002,"李四",19,"总监","2020-07-01"};Object[ ] a3 = {1003,"胖咸鱼",18,"程序员","2021-07-09"};此处基本数据类型”1001”,本质不是 Object 对象。JAVA 编译器会自动把基本数据类型“自动装箱”成包装类对象。这样我们只需要再定义一个二维数组,将上面 3 个数组放入即可:Object[][] emps = new Object[3][];emps[0] = a1;emps[1] = a2;emps[2] = a3;四、常见算法1.冒泡排序的基础算法1.1冒泡排序的基础算法冒泡排序算法重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,这样越大的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3.针对所有的元素重复以上的步骤,除了最后一个。4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。示例:冒泡排序的基础算法package cn.pxy.test;import java.util.Arrays;public class Test {public static void main(String[] args) {int[] values= {3,1,6,2,9,0,7,4,5,8};System.out.println(Arrays.toString(values));bubbleSort(values);System.out.println(Arrays.toString(values));}public static void bubbleSort(int[] values) {int temp;for(int i=0;i<values.length;i++) {for(intj=0;j<values.length-1-i;j++) {if(values[j]>values[j+1]) {temp=values[j];values[j]=values[j+1];values[j+1]=temp;}}}}}运行结果:重播播放00:00/00:00直播00:00进入全屏50点击按住可拖动视频上面为冒泡排序的执行动画,动画效果可以在下面这个网页上看:https://visualgo.net/这个网站汇聚了各种算法,可以用程序和动画结合的方式学习,想详细理解算法,可以借助这个网站。1.2冒泡排序的优化算法其实,我们可以把1.1的冒泡排序的算法优化一下,基于冒泡排序的以下特点:1.整个数列分成两部分:前面是无序数列,后面是有序数列。2.初始状态下,整个数列都是无序的,有序数列是空。3.每一趟循环可以让无序数列中最大数排到最后,(也就是说有序数列的元素个数增加1),也就是不用再去顾及有序序列。4.每一趟循环都从数列的第一个元素开始进行比较,依次比较相邻的两个元素,比较到无序数列的末尾即可(而不是数列的末尾);如果前一个大于后一个,交换。5.判断每一趟是否发生了数组元素的交换,如果没有发生,则说明此时数组已经有序,无需再进行后续趟数的比较了。此时可以中止比较。示例:packagecn.pxy.test;import java.util.Arrays;public class Test {public static void main(String[] args) {int[] values= {3,1,6,2,9,0,7,4,5,8};System.out.println(Arrays.toString(values));bubbleSort(values);System.out.println(Arrays.toString(values));}public static void bubbleSort(int[] values) {int temp;int i;//外层循环:n个元素排序,则至多需要n-1趟循环for(i=0;i<values.length-1;i++) {//定义一个布尔类型的变量,标记数组是否已达到有序状态boolean flag=true;/*内层循环:每一趟循环都从数列的前两个元素开始进行比较,比较到* 无序数组的最后*/for(int j=0;j<values.length-1-i;j++) {//如果前一个元素大于后一个元素,则交换两元素的值if(values[j]>values[j+1]) {temp=values[j];values[j]=values[j+1];values[j+1]=temp;//本趟发生了交换,表明该数组在本趟处于无序状态,需要继续比较flag=false;}}//根据标记量的值判断数组是否有序,如果有序,则退出;无序,则继续循环if(flag) {break;}}}}运行结果:2.二分法查找二分法检索(binary search)又称折半检索,二分法检索的基本思想是设数组中的元素从小到大有序地存放在数组(array)中,首先将给定值 key 与数组中间位置上元素的关键码(key)比较,如果相等,则检索成功;否则,若 key 小,则在数组前半部分中继续进行二分法检索;若 key 大,则在数组后半部分中继续进行二分法检索。这样,经过一次比较就缩小一半的检索区间,如此进行下去,直到检索成功或检索失败。二分法检索是一种效率较高的检索方法。比如,我们要在数组[7, 8, 9, 10, 12, 20, 30, 40, 50,80, 100]中查询到 10 元素,过程如下:示例:package cn.pxy.test;import java.util.Arrays;public class Test {public static void main(String[] args) {int[] arr= {30,10,60,20,90,9,70,40,50,80};int searchWord=20;//要查找的数Arrays.sort(arr);//二分法查找前一定要对数组元素排序System.out.println(Arrays.toString(arr));System.out.println(searchWord+"元素索引:"+binarySearch(arr,searchWord));}public static int binarySearch(int[] array,int values) {int low=0;int high=array.length-1;while(low<=high) {int middle=(low+high)/2;if(values==array[middle]) {return middle;//返回查询到的索引位置}if(values>array[middle]) {low=middle+1;}if(values<array[middle]) {high=middle-1;}}return -1;//上面循环完毕,说明未找到,返回-1}}运行结果:五、数组演练示例1.获取称为数组最小值代码如下:package cn.pxy.test;import java.awt.BorderLayout;import java.awt.EventQueue;importjavax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JTextField;import javax.swing.UIManager;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.util.Arrays;public class ArrayMinValue extends JFrame {private JPanel contentPane;private JTextField textField;private JLabel label;private JLabel label_1;public static void main(String[] args) {try {UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");} catch(Throwable e) {e.printStackTrace();}EventQueue.invokeLater(new Runnable() {public void run() {try {ArrayMinValue frame = new ArrayMinValue();frame.setVisible(true);}catch (Exception e) {e.printStackTrace();}}});}public ArrayMinValue() {setTitle("获取一维数组的最小值");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 450, 149);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);contentPane.setLayout(null);textField = new JTextField();textField.setBounds(6, 36, 414, 30);contentPane.add(textField);textField.setColumns(10);JButton button = new JButton("计算");button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {do_button_actionPerformed(e);}});button.setBounds(16, 76, 90, 30);contentPane.add(button);label = new JLabel("数组中最小的数是:");label.setBounds(116, 82, 304, 18);contentPane.add(label);label_1 = new JLabel("请在文本框中输入多个整数,以空格隔开!!");label_1.setBounds(6, 6, 422, 18);contentPane.add(label_1);}protected void do_button_actionPerformed(ActionEvent e) {String arrayStr = textField.getText().trim();for (int i = 0; i < arrayStr.length(); i++) {// 过滤非法输入char charAt = arrayStr.charAt(i);if(!Character.isDigit(charAt) && charAt != ) {JOptionPane.showMessageDialog(null, "输入包含非数字内容");textField.setText("");return;}}String[] numStrs = arrayStr.split(" {1,}");// 分割字符串int[] numArray =new int[numStrs.length];// 创建整数数组// 转换输入为整数数组for (int i = 0; i < numArray.length; i++) {numArray[i] = Integer.valueOf(numStrs[i]);}int min = numArray[0];// 创建最小数变量for (int j = 0; j < numArray.length; j++) {if (min > numArray[j]) {// 提取最小整数min = numArray[j];}}label.setText("数组中最小的数是:" + min);}}运行结果:2.将二维数组的行列互换代码如下:package cn.pxy.test;public class ArrayRowColumnSwap {public static void main(String[] args) {int arr[][]=new int[][] {{1,2,3},{4,5,6},{7,8,9}};System.out.println("行列调换前:");printArray(arr);int arr2[][]=new int[arr.length][arr.length];for(int i=0;i<arr.length;i++) {for(int j=0;j<arr[i].length;j++) {arr2[i][j]=arr[j][i];}}System.out.println("行列调换后:");printArray(arr2);}private static void printArray(int[][] arr) {for(int i=0;i<arr.length;i++) {for(int j=0;j<arr[i].length;j++) {System.out.print(arr[i][j]+" ");}System.out.println();}}}运行结果:3.利用数组随机抽取幸运观众代码如下:package cn.pxy.test;import java.awt.BorderLayout;import java.awt.EventQueue;importjavax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import javax.swing.JLabel;import javax.swing.JComboBox;importjavax.swing.JTextField;import javax.swing.JTextArea;import javax.swing.JScrollPane;import javax.swing.border.TitledBorder;import javax.swing.JButton;importjava.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.util.Random;importjavax.swing.UIManager;import java.awt.Color;public class ArrayExample extends JFrame {private JPanel contentPane;private JTextField nameField;privateJTextArea personnelArea;private JTextArea resultArea;public static void main(String[] args) {try {UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");} catch (Throwable e) {e.printStackTrace();}EventQueue.invokeLater(new Runnable() {public void run() {try{ArrayExample frame =new ArrayExample();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}public ArrayExample() {setTitle("利用数组抽取幸运观众");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 498, 300);contentPane = newJPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);contentPane.setLayout(null);JPanel panel = newJPanel();panel.setBorder(new TitledBorder(null,"输入在场观众姓名,按回车",TitledBorder.LEADING, TitledBorder.TOP, null,new Color(59, 59, 59)));panel.setBounds(10, 10, 174, 242);contentPane.add(panel);panel.setLayout(new BorderLayout(0, 5));nameField = new JTextField();nameField.addKeyListener(newKeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {do_textField_keyPressed(e);}});panel.add(nameField, BorderLayout.NORTH);nameField.setColumns(10);JScrollPane scrollPane = new JScrollPane();panel.add(scrollPane);personnelArea = newJTextArea();personnelArea.setEditable(false);scrollPane.setViewportView(personnelArea);JPanel panel_1 = new JPanel();panel_1.setBorder(new TitledBorder(null,"选取幸运观众",TitledBorder.LEADING, TitledBorder.TOP, null, new Color(59, 59,59)));panel_1.setBounds(183, 10, 219, 242);contentPane.add(panel_1);panel_1.setLayout(new BorderLayout(0, 0));JScrollPane scrollPane_1 = new JScrollPane();panel_1.add(scrollPane_1);resultArea = newJTextArea();resultArea.setEditable(false);resultArea.setLineWrap(true);scrollPane_1.setViewportView(resultArea);JButton button = new JButton("抽取");button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {do_button_actionPerformed(e);}});button.setBounds(407, 164, 63, 25);contentPane.add(button);JButton button_1 = new JButton("退出");button_1.addActionListener(newActionListener() {public void actionPerformed(ActionEvent e) {do_button_1_actionPerformed(e);}});button_1.setBounds(407, 215, 63, 25);contentPane.add(button_1);}protected void do_textField_keyPressed(KeyEvent e) {if (e.getKeyChar() != \n)// 不是回车字符不做处理return;String name = nameField.getText();if (name.isEmpty())// 如果文本框没有字符串不做处理return;personnelArea.append(name + "\n");// 把输入人名与回车符添加到人员列表nameField.selectAll();// 选择文本框所有字符}protected void do_button_actionPerformed(ActionEvent e) {String perstring = personnelArea.getText();// 获取人员列表文本String[] personnelArray = perstring.split("\n{1,}");// 获取人员数组int index = (int) (Math.random() * personnelArray.length);// 生成随机数组索引// 定义包含格式参数的中奖信息String formatArg = "本次抽取观众人员:\n\t%1$s\n恭喜%1$s成为本次观众抽奖的大奖得主。"+ "\n\n我们将为%1$s颁发:\n\t过期的酸奶二十箱。";// 为中奖信息添加人员参数String info = String.format(formatArg, personnelArray[index]);resultArea.setText(info);// 在文本域显示中间信息}protected void do_button_1_actionPerformed(ActionEvent e) {dispose();}}运行结果:4.反转数组中元素的顺序以相反的顺序把原有的数组的内容重新排列。代码如下:package cn.pxy.test;import java.awt.EventQueue;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import java.awt.event.ActionEvent;importjava.awt.event.ActionListener;import java.util.Random;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;importjavax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.border.EmptyBorder;import javax.swing.UIManager;import javax.swing.JTextField;importjavax.swing.JLabel;public class ReverseSort extends JFrame {private JPanel contentPane;public static void main(String[] args) {try {UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");} catch (Throwable e) {e.printStackTrace();}EventQueue.invokeLater(new Runnable() {public void run() {try {ReverseSort frame = new ReverseSort();frame.setVisible(true);} catch(Exception e) {e.printStackTrace();}}});}public ReverseSort() {setTitle("反转数组中元素的顺序");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 450, 300);contentPane =new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);GridBagLayout gbl_contentPane = newGridBagLayout();gbl_contentPane.columnWidths =new int[] { 0, 0 };gbl_contentPane.rowHeights = new int[] { 0, 0, 0, 0, 0, 0};gbl_contentPane.columnWeights =new double[] { 1.0, Double.MIN_VALUE };gbl_contentPane.rowWeights = new double[] { 0.0, 0.0, 0.0, 1.0, 0.0,Double.MIN_VALUE };contentPane.setLayout(gbl_contentPane);label =new JLabel("输入数组的内容,以空格分割数组元素");GridBagConstraints gbc_label = newGridBagConstraints();gbc_label.anchor = GridBagConstraints.WEST;gbc_label.insets =new Insets(0, 0, 5, 0);gbc_label.gridx = 0;gbc_label.gridy = 0;contentPane.add(label, gbc_label);textField =new JTextField();GridBagConstraints gbc_textField = newGridBagConstraints();gbc_textField.fill = GridBagConstraints.HORIZONTAL;gbc_textField.insets =new Insets(0, 0, 5, 0);gbc_textField.gridx = 0;gbc_textField.gridy = 1;contentPane.add(textField, gbc_textField);label_1 =new JLabel("数组元素反转:");GridBagConstraints gbc_label_1 = newGridBagConstraints();gbc_label_1.anchor = GridBagConstraints.WEST;gbc_label_1.insets =new Insets(0, 0, 5, 0);gbc_label_1.gridx = 0;gbc_label_1.gridy = 2;contentPane.add(label_1, gbc_label_1);JScrollPane scrollPane_1 =new JScrollPane();GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();gbc_scrollPane_1.insets = new Insets(0, 0, 5, 0);gbc_scrollPane_1.fill = GridBagConstraints.BOTH;gbc_scrollPane_1.gridx = 0;gbc_scrollPane_1.gridy = 3;contentPane.add(scrollPane_1, gbc_scrollPane_1);textArea =new JTextArea();scrollPane_1.setViewportView(textArea);JButton button_1 = new JButton("反转排序法");button_1.setActionCommand("快速排序法");button_1.addActionListener(new ActionListener() {public voidactionPerformed(ActionEvent e) {do_button_1_actionPerformed(e);}});GridBagConstraints gbc_button_1 =new GridBagConstraints();gbc_button_1.gridx = 0;gbc_button_1.gridy = 4;contentPane.add(button_1, gbc_button_1);}private JTextField textField;private JTextArea textArea;private JLabel label;private JLabel label_1;protected void do_button_1_actionPerformed(ActionEvent e) {String inText = textField.getText();// 获取用户输入String[] array = inText.split(" {1,}");int len = array.length;textArea.setText("");for (int i = 0; i < len / 2; i++) {String temp = array[i];array[i] = array[len - 1 - i];array[len - 1 - i] = temp;for(Stringstring : array) {textArea.append(string + " ");}textArea.append("\n");}}}运行结果:运行过程:初始数据:【10 20 30 40 50 60 70 80 90】第一趟:90【20 30 40 50 60 70 80】10第二趟:90 80【30 40 50 60 70】20 10第三趟:90 80 70【40 50 60】30 20 10第四趟:90 80 70 60 【50】 40 30 20 105.使用选择排序法选择排序的基本思路是:每一趟从待排序的数据元素中选择最小(或最大)的一个元素,顺序放在已排好序的数列最后,直到全部待排序的数据元素排完。代码如下:package cn.pxy.test;import java.awt.BorderLayout;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import java.awt.GridBagLayout;import javax.swing.JScrollPane;importjava.awt.GridBagConstraints;import javax.swing.JButton;import java.awt.Insets;import javax.swing.JTextArea;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.util.Random;public class SelectSort extends JFrame {private JPanel contentPane;/*** Launch the application.*/public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {SelectSort frame = new SelectSort();frame.setVisible(true);}catch (Exception e) {e.printStackTrace();}}});}/*** Create the frame.*/public SelectSort() {setTitle("选择排序法");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 450, 300);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);GridBagLayout gbl_contentPane = new GridBagLayout();gbl_contentPane.columnWidths = new int[] { 0, 0 };gbl_contentPane.rowHeights = new int[] { 0, 0, 0, 0, 0 };gbl_contentPane.columnWeights = new double[] { 1.0, Double.MIN_VALUE };gbl_contentPane.rowWeights =new double[] { 1.0, 0.0, 1.0, 0.0,Double.MIN_VALUE };contentPane.setLayout(gbl_contentPane);JScrollPane scrollPane = new JScrollPane();GridBagConstraints gbc_scrollPane = new GridBagConstraints();gbc_scrollPane.insets = new Insets(0, 0, 5, 0);gbc_scrollPane.fill = GridBagConstraints.BOTH;gbc_scrollPane.gridx =0;gbc_scrollPane.gridy = 0;contentPane.add(scrollPane, gbc_scrollPane);textArea1 =new JTextArea();scrollPane.setViewportView(textArea1);JButton button = new JButton("生成随机数");button.addActionListener(newActionListener() {public void actionPerformed(ActionEvent e) {do_button_actionPerformed(e);}});GridBagConstraints gbc_button = newGridBagConstraints();gbc_button.insets =new Insets(0, 0, 5, 0);gbc_button.gridx = 0;gbc_button.gridy = 1;contentPane.add(button, gbc_button);JScrollPane scrollPane_1 =new JScrollPane();GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();gbc_scrollPane_1.insets = new Insets(0, 0, 5, 0);gbc_scrollPane_1.fill = GridBagConstraints.BOTH;gbc_scrollPane_1.gridx =0;gbc_scrollPane_1.gridy = 2;contentPane.add(scrollPane_1, gbc_scrollPane_1);textArea2 =new JTextArea();scrollPane_1.setViewportView(textArea2);JButton button_1 = new JButton("选择排序法");button_1.addActionListener(new ActionListener() {public voidactionPerformed(ActionEvent e) {do_button_1_actionPerformed(e);}});GridBagConstraints gbc_button_1 =new GridBagConstraints();gbc_button_1.gridx = 0;gbc_button_1.gridy = 3;contentPane.add(button_1, gbc_button_1);}private int[] array = new int[10];private JTextArea textArea1;private JTextArea textArea2;protected void do_button_actionPerformed(ActionEvent e) {Random random =new Random();// 创建随机数对象textArea1.setText("");// 清空文本域for (int i = 0; i < array.length; i++) {// 初始化数组元素array[i] = random.nextInt(50);// 生成50以内的随机数textArea1.append(array[i]+" ");// 把数组元素显示的文本域控件中}}protected void do_button_1_actionPerformed(ActionEvent e) {textArea2.setText("");// 清空文本域intindex;for (int i = 1; i < array.length; i++) {index = 0;for (int j = 1; j <= array.length - i; j++) {if (array[j] > array[index]) {index = j;// 查找最大值}}// 交换在位置array.length-i和index(最大值)两个数int temp = array[array.length - i];array[array.length - i] = array[index];array[index] = temp;}for (int i = 0; i <array.length; i++) {textArea2.append(array[i] + " ");// 把排序后的数组元素显示到文本域中}}}运行结果:6.使用冒泡排序代码如下:package cn.pxy.test;importjava.awt.BorderLayout;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import java.awt.GridBagLayout;import javax.swing.JScrollPane;import java.awt.GridBagConstraints;import javax.swing.JButton;import java.awt.Insets;import javax.swing.JTextArea;importjava.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.util.Random;public class BubbleSort extends JFrame {private JPanel contentPane;public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {BubbleSort frame = newBubbleSort();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/*** Create the frame.*/public BubbleSort() {setTitle("冒泡排序法");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 450, 300);contentPane = newJPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);GridBagLayout gbl_contentPane = newGridBagLayout();gbl_contentPane.columnWidths =new int[] { 0, 0 };gbl_contentPane.rowHeights = new int[] { 0, 0, 0, 0, 0 };gbl_contentPane.columnWeights = new double[] { 1.0, Double.MIN_VALUE };gbl_contentPane.rowWeights =new double[] { 1.0, 0.0, 1.0, 0.0,Double.MIN_VALUE };contentPane.setLayout(gbl_contentPane);JScrollPane scrollPane =new JScrollPane();GridBagConstraints gbc_scrollPane = new GridBagConstraints();gbc_scrollPane.insets = new Insets(0, 0, 5, 0);gbc_scrollPane.fill = GridBagConstraints.BOTH;gbc_scrollPane.gridx =0;gbc_scrollPane.gridy = 0;contentPane.add(scrollPane, gbc_scrollPane);textArea1 =new JTextArea();scrollPane.setViewportView(textArea1);JButton button = new JButton("生成随机数");button.addActionListener(newActionListener() {public void actionPerformed(ActionEvent e) {do_button_actionPerformed(e);}});GridBagConstraints gbc_button = newGridBagConstraints();gbc_button.insets =new Insets(0, 0, 5, 0);gbc_button.gridx = 0;gbc_button.gridy = 1;contentPane.add(button, gbc_button);JScrollPane scrollPane_1 =new JScrollPane();GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();gbc_scrollPane_1.insets = newInsets(0, 0, 5, 0);gbc_scrollPane_1.fill = GridBagConstraints.BOTH;gbc_scrollPane_1.gridx = 0;gbc_scrollPane_1.gridy = 2;contentPane.add(scrollPane_1, gbc_scrollPane_1);textArea2 =new JTextArea();scrollPane_1.setViewportView(textArea2);JButton button_1 = new JButton("冒泡排序法");button_1.setActionCommand("冒泡排序法");button_1.addActionListener(new ActionListener() {public voidactionPerformed(ActionEvent e) {do_button_1_actionPerformed(e);}});GridBagConstraints gbc_button_1 =new GridBagConstraints();gbc_button_1.gridx = 0;gbc_button_1.gridy =3;contentPane.add(button_1, gbc_button_1);}private int[] array = new int[10];private JTextArea textArea1;private JTextArea textArea2;protected void do_button_actionPerformed(ActionEvent e) {Random random = new Random();// 创建随机数对象textArea1.setText("");// 清空文本域for (int i = 0; i < array.length; i++) {// 初始化数组元素array[i] = random.nextInt(50);// 生成50以内的随机数textArea1.append(array[i] + " ");// 把数组元素显示的文本域控件中}}protected void do_button_1_actionPerformed(ActionEvent e) {textArea2.setText("");// 清空文本域for (int i = 1; i < array.length; i++) {// 比较相邻两个元素,较大的数往后冒泡for (int j = 0; j < array.length - i; j++) {if (array[j] > array[j + 1]) {int temp = array[j];// 把第一个元素值保持到临时变量中array[j] = array[j + 1];// 把第二个元素值保存到第一个元素单元中array[j + 1] = temp;// 把临时变量也就是第一个元素原值保持到第二个元素中}textArea2.append(array[j] + " ");// 把排序后的数组元素显示到文本域中}textArea2.append("【");for (int j = array.length - i; j < array.length; j++) {textArea2.append(array[j] + " ");// 把排序后的数组元素显示到文本域中}textArea2.append("】\n");}}}运行结果:7.使用快速排序法快速排序法是对冒泡排序算法的一种改进,它的基本思想是,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的数据比另一部分的所有数据都要小,然后再按此方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此使整个数据变成有序序列。代码如下:package cn.pxy.test;import java.awt.EventQueue;importjava.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Random;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;importjavax.swing.border.EmptyBorder;import javax.swing.UIManager;import javax.swing.JTextField;public class QuickSort extends JFrame {private JPanel contentPane;public static void main(String[] args) {try {UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");} catch(Throwable e) {e.printStackTrace();}EventQueue.invokeLater(new Runnable() {public void run() {try {QuickSort frame = new QuickSort();frame.setVisible(true);}catch (Exception e) {e.printStackTrace();}}});}/*** Create the frame.*/public QuickSort() {setTitle("快速排序法");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 450, 300);contentPane = newJPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);GridBagLayout gbl_contentPane = new GridBagLayout();gbl_contentPane.columnWidths = new int[] { 0, 0 };gbl_contentPane.rowHeights = new int[] { 0, 0, 0, 0, 0 };gbl_contentPane.columnWeights = new double[] { 1.0, Double.MIN_VALUE };gbl_contentPane.rowWeights =new double[] { 0.0, 0.0, 1.0, 0.0,Double.MIN_VALUE };contentPane.setLayout(gbl_contentPane);JButton button = newJButton("生成随机数");button.addActionListener(new ActionListener() {public voidactionPerformed(ActionEvent e) {do_button_actionPerformed(e);}});textField =new JTextField();GridBagConstraints gbc_textField = newGridBagConstraints();gbc_textField.fill = GridBagConstraints.HORIZONTAL;gbc_textField.insets =new Insets(0, 0, 5, 0);gbc_textField.gridx = 0;gbc_textField.gridy = 0;contentPane.add(textField, gbc_textField);GridBagConstraints gbc_button =new GridBagConstraints();gbc_button.insets = new Insets(0, 0, 5, 0);gbc_button.gridx = 0;gbc_button.gridy =1;contentPane.add(button, gbc_button);JScrollPane scrollPane_1 = new JScrollPane();GridBagConstraints gbc_scrollPane_1 = newGridBagConstraints();gbc_scrollPane_1.insets =new Insets(0, 0, 5, 0);gbc_scrollPane_1.fill = GridBagConstraints.BOTH;gbc_scrollPane_1.gridx = 0;gbc_scrollPane_1.gridy =2;contentPane.add(scrollPane_1, gbc_scrollPane_1);textArea2 = newJTextArea();scrollPane_1.setViewportView(textArea2);JButton button_1 =new JButton("快速排序法");button_1.setActionCommand("快速排序法");button_1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {do_button_1_actionPerformed(e);}});GridBagConstraints gbc_button_1 = newGridBagConstraints();gbc_button_1.gridx =0;gbc_button_1.gridy = 3;contentPane.add(button_1, gbc_button_1);}private int[] array = new int[10];privateJTextField textField;private JTextArea textArea2;protected void do_button_actionPerformed(ActionEvent e) {Random random = new Random();// 创建随机数对象String text = "";for (int i = 0; i < array.length; i++) {// 初始化数组元素array[i] = random.nextInt(90);// 生成50以内的随机数text += (array[i] + " ");// 把数组元素显示的文本域控件中}textField.setText(text);}protected void do_button_1_actionPerformed(ActionEvent e) {textArea2.setText("");// 清空文本域quickSort(array, 0, array.length - 1);// 调用快速排序算法}private void quickSort(int sortarray[], int lowIndex, int highIndex) {int lo = lowIndex;// 记录最小索引int hi = highIndex;// 记录最大索引int mid;// 记录分界点元素if(highIndex > lowIndex) {mid = sortarray[(lowIndex + highIndex) /2];// 确定中间分界点元素值while (lo <= hi) {while ((lo < highIndex) && (sortarray[lo] < mid))++lo;// 确定不大于分界元素值的最小索引while ((hi > lowIndex) && (sortarray[hi] > mid))--hi;// 确定大于分界元素值的最大索引if (lo <= hi) {// 如果最小与最大索引没有重叠swap(sortarray, lo, hi);// 交换两个索引的元素++lo;// 递增最小索引--hi;// 递减最大索引}}if (lowIndex < hi)// 递归排序没有未分解元素quickSort(sortarray, lowIndex, hi);if (lo < highIndex)// 递归排序没有未分解元素quickSort(sortarray, lo, highIndex);}}private void swap(int swapArray[], int i, int j) {int temp = swapArray[i];// 交换数组元素swapArray[i] = swapArray[j];swapArray[j] = temp;for (int k = 0; k < array.length; k++) {// 把数组元素显示到文本域textArea2.append(array[k] + " ");}textArea2.append("\n");// 追加换行符}}运行结果:8.使用直接插入法插入排序是将一个记录插入到有序数列中,使得到的新数列任然有序。插入排序的思想是,将n个有序数存在数组a中,要插入的数为x,首先确定x插在数组中的位置p,数组中p之后的元素都向后移一个位置,空出a(p),将x放入。这样即可实现插入后数列任然有序。代码如下:package cn.pxy.test;import java.awt.EventQueue;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Random;importjavax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.border.EmptyBorder;import javax.swing.UIManager;public class InsertSort extends JFrame {private JPanel contentPane;public static void main(String[] args) {try {UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");} catch (Throwable e) {e.printStackTrace();}EventQueue.invokeLater(new Runnable() {public void run() {try{InsertSort frame =new InsertSort();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/*** Create the frame.*/public InsertSort() {setTitle("使用直接插入法");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 335, 300);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);contentPane.setLayout(null);textArea1 =new JTextArea();textArea1.setBounds(6, 6, 86, 250);contentPane.add(textArea1);JButton button = new JButton("生成随机数");button.addActionListener(new ActionListener() {public voidactionPerformed(ActionEvent e) {do_button_actionPerformed(e);}});button.setBounds(104, 49, 114, 30);contentPane.add(button);JButton button_1 = new JButton("直接插入法");button_1.addActionListener(newActionListener() {public void actionPerformed(ActionEvent e) {do_button_1_actionPerformed(e);}});button_1.setBounds(104, 161, 114, 30);contentPane.add(button_1);textArea2 =new JTextArea();textArea2.setBounds(230, 6, 86, 250);contentPane.add(textArea2);}private int[] array = new int[10];private JTextArea textArea1;private JTextArea textArea2;protected void do_button_actionPerformed(ActionEvent e) {Random random = new Random();// 创建随机数对象textArea1.setText("");for (int i = 0; i < array.length; i++) {// 初始化数组元素array[i] = random.nextInt(90);// 生成50以内的随机数textArea1.append(array[i] + "\n");// 把数组元素显示的文本域控件中}}protected void do_button_1_actionPerformed(ActionEvent e) {int tmp;// 定义临时变量int j;for (int i = 1; i < array.length; i++) {tmp = array[i];// 保存临时变量for (j = i - 1; j >= 0 && array[j] > tmp; j--) {array[j + 1] = array[j];// 数组元素交换}array[j + 1] = tmp;// 在排序位置插入数据}textArea2.setText("");for (int i = 0; i < array.length; i++) {// 初始化数组元素textArea2.append(array[i] + "\n");// 把数组元素显示的文本域控件中}}}运行结果:
2023年12月07日
0 阅读
0 评论
0 点赞
2023-12-07
越早知道越好(java二维数组的方法)java二维数组操作,Java二维数组详解!!,java 二维数组 行列,
为了方便组织各种信息,计算机常将信息以表的形式进行组织,然后再以行和列的形式呈现出来。二维数组的结构决定了其能非常方便地表示计算机中的表,以第一个下标表示元素所在的行,第二个下标表示元素所在的列。下面简单了解一下二维数组,包括数组的声明和初始化。创建二维数组在Java中二维数组被看作数组的数组,即二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。Java 并不直接支持二维数组,但是允许定义数组元素是一维数组的一维数组,以达到同样的效果。声明二维数组的语法如下:type arrayName[][]; // 数据类型 数组名[][];或type[][] arrayName; // 数据类型[][] 数组名;其中,type 表示二维数组的类型,arrayName 表示数组名称,第一个中括号表示行,第二个中括号表示列。下面分别声明 int 类型和 char 类型的数组,代码如下:int[][] age;char[][] sex;初始化二维数组二维数组可以初始化,和一维数组一样,可以通过 3 种方式来指定元素的初始值。这 3 种方式的语法如下:type[][] arrayName = new type[][]{值 1,值 2,值 3,…,值 n}; // 在定义时初始化type[][] arrayName = new type[size1][size2]; // 给定空间,在赋值type[][] arrayName = new type[size][]; // 数组第二维长度为空,可变化例 1使用第一种方式声明 int 类型的二维数组,然后初始化该二维数组。代码如下:int[][] temp = new int[][]{{1,2},{3,4}};上述代码创建了一个二行二列的二维数组 temp,并对数组中的元素进行了初始化。下图为该数组的内存结构。二维数组内存结构使用第二种方式声明 int 类型的二维数组,然后初始化该二维数组。代码如下:int[][] temp = new int[2][2];使用第三种方式声明 int 类型的二维数组,并且初始化数组。代码如下:int[][] temp = new int[2][];获取单个元素在上部分使用的前 2 种方式创建并初始化了一个二行二列的 int 类型数组 temp。当需要获取二维数组中元素的值时,也可以使用下标来表示。语法如下:arrayName[i-1][j-1];其中,arrayName 表示数组名称,i 表示数组的行数,j 表示数组的列数。例如,要获取第二行第二列元素的值,应该使用 temp[1][1]来表示。这是由于数组的下标起始值为 0,因此行和列的下标需要减 1。例 2通过下标获取 class_score 数组中第二行第二列元素的值与第四行第一列元素的值。代码如下:public static void main(String[] args) {double[][] class_score = {{10.0,99,99},{100,98,97},{100,100,99.5},{99.5,99,98.5}};System.out.println("第二行第二列元素的值:"+class_score[1][1]);System.out.println("第四行第一列元素的值:"+class_score[3][0]);}执行上述代码,输出结果如下:第二行第二列元素的值:98.0第四行第一列元素的值:99.5获取全部元素在一维数组中直接使用数组的 length 属性获取数组元素的个数。而在二维数组中,直接使用 length 属性获取的是数组的行数,在指定的索引后加上 length(如 array[0].length)表示的是该行拥有多少个元素,即列数。如果要获取二维数组中的全部元素,最简单、最常用的办法就是使用 for 语句。在一维数组全部输出时,我们使用一层 for 循环,而二维数组要想全部输出,则使用嵌套 for 循环(2 层 for 循环)。例 3使用 for 循环语句遍历 double 类型的 class_score 数组的元素,并输出每一行每一列元素的值。代码如下:public static void main(String[] args) {double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } };for (int i = 0; i < class_score.length; i++) { // 遍历行for (int j = 0; j < class_score[i].length; j++) {System.out.println("class_score[" + i + "][" + j + "]=" + class_score[i][j]);}}}上述代码使用嵌套 for 循环语句输出二维数组。在输出二维数组时,第一个 for 循环语句表示以行进行循环,第二个 for 循环语句表示以列进行循环,这样就实现了获取二维数组中每个元素的值的功能。执行上述代码,输出结果如下所示。class_score[0][0]=100.0class_score[0][1]=99.0class_score[0][2]=99.0class_score[1][0]=100.0class_score[1][1]=98.0class_score[1][2]=97.0class_score[2][0]=100.0class_score[2][1]=100.0class_score[2][2]=99.5class_score[3][0]=99.5class_score[3][1]=99.0class_score[3][2]=98.5例 4假设有一个矩阵为 5 行 5 列,该矩阵是由程序随机产生的 10 以内数字排列而成。下面使用二维数组来创建该矩阵,代码如下:public class Test11 {public static void main(String[] args) {// 创建一个二维矩阵int[][] matrix = new int[5][5];// 随机分配值for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix[i].length; j++) {matrix[i][j] = (int) (Math.random() * 10);}}System.out.println("下面是程序生成的矩阵\n");// 遍历二维矩阵并输出for (int k = 0; k < matrix.length; k++) {for (int g = 0; g < matrix[k].length; g++) {System.out.print(matrix[k][g] + "");}System.out.println();}}}在该程序中,首先定义了一个二维数组,然后使用两个嵌套的 for 循环向二维数组中的每个元素赋值。其中,Math.random() 方法返回的是一个 double 类型的数值,数值为 0.6、0.9 等,因此乘以 10 之后为 10 以内的整数。最后又使用了两个嵌套的 for 循环遍历二维数组,输出二维数组中的值,从而产生矩阵。运行该程序的结果如下所示。下面是程序生成的矩阵7814869230438237566305688for each 循环语句不能自动处理二维数组的每一个元素。它是按照行, 也就是一维数组处理的。要想访问二维教组 a 的所有元素, 需要使用两个嵌套的循环, 如下所示:for (double[] row : a) {for (double value : row) {......}}把【例2】修改为使用 for each 循环语句输出,代码如下所示:public static void main(String[] args) {double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } };for (double[] row : class_score) {for (double value : row) {System.out.println(value);}}}输出结果为:100.099.099.0100.098.097.0100.0100.099.599.599.098.5提示:要想快速地打印一个二维数组的数据元素列表,可以调用:System.out.println(Arrays.deepToString(arrayName));代码如下:System.out.println(Arrays.deepToString(class_score));输出格式为:[[100.0, 99.0, 99.0], [100.0, 98.0, 97.0], [100.0, 100.0, 99.5], [99.5, 99.0, 98.5]]获取整行元素除了获取单个元素和全部元素之外,还可以单独获取二维数组的某一行中所有元素的值,或者二维数组中某一列元素的值。获取指定行的元素时,需要将行数固定,然后只遍历该行中的全部列即可。例 5编写一个案例,接收用户在控制台输入的行数,然后获取该行中所有元素的值。代码如下:public static void main(String[] args) {double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } };Scanner scan = new Scanner(System.in);System.out.println("当前数组只有" + class_score.length + "行,您想查看第几行的元素?请输入:");int number = scan.nextInt();for (int j = 0; j < class_score[number - 1].length; j++) {System.out.println("第" + number + "行的第[" + j + "]个元素的值是:" + class_score[number - 1][j]);}}执行上述代码进行测试,输出结果如下所示。当前数组只有4行,您想查看第几行的元素?请输入:3第3行的第[0]个元素的值是:100.0第3行的第[1]个元素的值是:100.0第3行的第[2]个元素的值是:99.5获取整列元素获取指定列的元素与获取指定行的元素相似,保持列不变,遍历每一行的该列即可。例 6编写一个案例,接收用户在控制台中输入的列数,然后获取二维数组中所有行中该列的值。代码如下:public static void main(String[] args) {double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } };Scanner scan = new Scanner(System.in);System.out.println("您要获取哪一列的值?请输入:");int number = scan.nextInt();for (int i = 0; i < class_score.length; i++) {System.out.println("第 " + (i + 1) + " 行的第[" + number + "]个元素的值是" + class_score[i][number]);}}执行上述代码进行测试,如下所示。您要获取哪一列的值?请输入:2第 1 行的第[2]个元素的值是99.0第 2 行的第[2]个元素的值是97.0第 3 行的第[2]个元素的值是99.5第 4 行的第[2]个元素的值是98.5更多Java学习视频Java基础:Java300集,Java必备优质视频_手把手图解学习Java,让学习成为一种享受Java项目:【Java游戏项目】1小时教你用Java语言做经典扫雷游戏_手把手教你开发游戏【Java毕业设计】OA办公系统项目实战_OA员工管理系统项目_java开发
2023年12月07日
0 阅读
0 评论
0 点赞
2023-12-07
难以置信(java程序员一般做什么工作内容好)java程序员有前途吗,Java程序员上班都干啥?就做这几件事情,java系统维护,
Java程序员作为目前较受欢迎的岗位之一,很多人都好奇一个问题,那就是Java程序员上班都干啥?这题小编再熟悉不过了。下面,我就为大家详细介绍下Java程序员上班需要做的事,帮你解决“Java程序员上班都干啥?”这个问题。1.分析和设计作为Java程序员,你需要理解客户的需求,并将其转化为可行的解决方案。这意味着你需要进行需求分析、架构设计和数据库设计等工作。2.编码和调试Java程序员的核心工作是编写代码。同时这也是“Java程序员上班都干啥?”这个问题中程序员的主要工作。你需要根据设计文档,使用Java语言编写高质量的代码。此外,你还需要调试和修复在编码过程中遇到的bug。3.测试和优化编码完成后,你需要进行系统测试,确保代码的可靠性和稳定性。这包括单元测试、集成测试和性能测试等。4.文档和协作作为一名Java程序员,你需要编写文档来记录代码的使用和维护方法。同时,你也需要与团队成员进行协作,参与项目讨论和需求评审等活动。 5.维护系统作为Java程序员,你还需要负责系统的维护工作。这包括监控系统运行状态、处理用户反馈和解决系统故障等。6.持续学习Java行业发展迅速,为了保持个人竞争力,你需要不断学习新知识。动力节点的架构师培训班,是很多Java程序员进修的选择,其讲师都有十年以上工作经验,专业实力过硬,有需要的小伙伴可以了解一下。 以上就是小编对“Java程序员上班都干啥?”的回答了,总的来说,Java程序员要做的事情虽然很多,但薪资比较高,能做到付出和回报成正比。
2023年12月07日
0 阅读
0 评论
0 点赞
1
2
...
283