当前位置: 首页 > news >正文

第4章-第3节-Java中跟数组相关的几个算法以及综合应用

在写这篇博文之前,先大概说明一下,就是很常见的数组算法如求最大值、一维数组的遍历等,这里就不去专门说明了,只说一些有代表性的,然后就是冒泡排序算法很容易查阅到,这里也不专门说明了,只说明一个较冒泡难理解一点点的选择排序,最后再说一下,就是这些算法都是练习自己的思维能力,其实有些功能如果你不想做,可以直接用java.util.Arrays这个类库就可以达到效果。

1、一维数组的反转问题:已知数组为arr;

方法1:首尾对换(推荐采用异或去进行交换,具体方法查看我C语言专栏里的博文);

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

方法2:定义两个起点(左端起点、右端起点);

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

方法3:创建一个新数组,把原数据倒序输入到新数组;

int[] newArr = new int[arr.length];
for(int i = arr.length - 1,j = 0; i >= 0; i--,j++){newArr[j] = arr[i];
}

2、选择排序升序:(推荐采用异或去进行交换,具体方法查看我C语言专栏里的博文)

//外层循环控制轮数,此处的i可以认为是选中空间
for(int i = 0;i <= arr.length - 2;i++){//内层循环控制每一轮执行的次数,此处的j可以认为是比较空间for(int j = i + 1;j <= arr.length - 1;j++){if(arr[i] > arr[j]){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}
}

选择排序大概思路:拿升序作例子,从0元素开始,把它分别和后面的元素去对比,如果0元素大于它,那么就去交换,0元素做一轮下来,最小的数就会在0元素位置了,接着第二轮从1元素开始,把它分别和后面的元素去对比,如果1元素大于它,那么就去交换,这一轮做完那么第二小的数会在1元素位置,依次类推,一直做下去,最后实现上就是外层循环为选中的某一个位置的元素,然后内循环就是拿这个位置的元素去和它后面所有的数去对比,最后根据大小进行处理。

3、常规应用:

1)、打印如下的效果
           11111
           22222
           33333
           44444
           55555

//创建二维数组对象	5行5列
int[][] arr = new int[5][5];
//循环操作
//外层循环控制行数/轮数	==>	理解:锁定/定位到每一个一维数组
for(int i = 0;i <= arr.length - 1;i++){//内层循环控制每一行的列数 ==> 理解:定位当前一维数组的每个元素for(int j = 0;j <= arr[i].length - 1;j++){//为当前一维数组的每个元素显示赋值arr[i][j] = i + 1;//获取当前一维数组的每个元素,打印看效果System.out.print(arr[i][j]);}//单独换行System.out.println();
}

2)、打印如下的效果
            1
            22
            333
            4444
            55555

//创建二维数组对象	5行
int[][] arr = new int[5][];
//循环创建5个一维数组对象,将地址关联到二维数组元素位置
for(int i = 0;i <= arr.length - 1;i++){arr[i] = new int[i + 1];//循环操作 => 为当前一维数组的每个元素显示赋值&当前元素内容for(int j = 0;j <= arr[i].length - 1;j++){arr[i][j] = i + 1;System.out.print(arr[i][j]);}System.out.println();
}

3)、综合应用:

import java.util.Random;
import java.util.Scanner;/*** 需求:保存全班的每个组的成绩,并对成绩做统计** 1. 从键盘输入一共有几组* 2. 从键盘输入每一组分别有多少人* 3. 每个人的成绩随机生成(这里用随机方便一点,如果手动输入太累了,其实最后效果都一样)* 4. 统计每一组的最高分、最低分* 5. 统计每一组的平均分* 6. 统计全班的最高分、最低分* 7. 统计全班的平均分* 8. 统计全班的总人数*/
public class Work {public static void main(String[] args) {int[][] array = getArray();System.out.println("--------------------------------------------------------------------------------------------");groupScore(array);allScore(array);}//处理1、2、3public static int[][] getArray(){Random r = new Random();Scanner sc = new Scanner(System.in);System.out.println("请输入一共有多少组:");int groupNum = sc.nextInt();while (groupNum < 1) {System.out.println("输入有误,重新输入一共有多少组:");groupNum = sc.nextInt();}int[][] arr = new int[groupNum][];for (int i = 0; i < groupNum; i++) {System.out.println("请输入第" + (i + 1) + "组有多少人:");int peopleNum = sc.nextInt();while (peopleNum < 1) {System.out.println("输入有误,重新输入第" + (i + 1) + "组有多少人:");peopleNum = sc.nextInt();}arr[i] = new int[peopleNum];for (int j = 0; j < peopleNum; j++) {arr[i][j] = r.nextInt(100) + 1;}}sc.close();for (int i = 0; i < arr.length; i++) {System.out.print("第" + (i + 1) + "组:");for (int j = 0; j < arr[i].length; j++) {System.out.print("第" + (j + 1) + "人成绩=" + arr[i][j] + "\t");}System.out.println();}return arr;}//处理4、5public static void groupScore(int[][] arr) {for (int i = 0; i < arr.length; i++) {int max = arr[i][0];int min = arr[i][0];int sum = 0;for (int j = 1; j < arr[i].length; j++) {if (arr[i][j] > max) {max = arr[i][j];}if (arr[i][j] < min) {min = arr[i][j];}sum += arr[i][j];}System.out.println("第" + (i + 1) + "组最高分为:" + max + ",最低分为:" + min + ",平均分为:" + (sum / arr[i].length));}}//处理6、7、8public static void allScore(int[][] arr) {int max = arr[0][0];int min = arr[0][0];int sum = 0;int peopleNum = 0;for (int i = 0; i < arr.length; i++) {peopleNum += arr[i].length;for (int j = 0; j < arr[i].length; j++) {if (arr[i][j] > max) {max = arr[i][j];}if (arr[i][j] < min) {min = arr[i][j];}sum += arr[i][j];}}System.out.println("全班最高分为:" + max + ",最低分为:" + min + ",平均分为:" + (sum / peopleNum));}
}

本电子书目录:《Java基础的重点知识点全集》

相关文章:

第4章-第3节-Java中跟数组相关的几个算法以及综合应用

在写这篇博文之前&#xff0c;先大概说明一下&#xff0c;就是很常见的数组算法如求最大值、一维数组的遍历等&#xff0c;这里就不去专门说明了&#xff0c;只说一些有代表性的&#xff0c;然后就是冒泡排序算法很容易查阅到&#xff0c;这里也不专门说明了&#xff0c;只说明…...

AlexNet(pytorch)

AlexNet是2012年ISLVRC 2012&#xff08;ImageNet Large Scale Visual Recognition Challenge&#xff09;竞赛的冠军网络&#xff0c;分类准确率由传统的 70%提升到 80% 该网络的亮点在于&#xff1a; &#xff08;1&#xff09;首次利用 GPU 进行网络加速训练。 &#xff…...

【单调栈 】LeetCode321:拼接最大数

作者推荐 【动态规划】【广度优先搜索】LeetCode:2617 网格图中最少访问的格子数 本文涉及的知识点 单调栈 题目 给定长度分别为 m 和 n 的两个数组&#xff0c;其元素由 0-9 构成&#xff0c;表示两个自然数各位上的数字。现在从这两个数组中选出 k (k < m n) 个数字…...

TikTok与虚拟现实的完美交融:全新娱乐时代的开启

TikTok&#xff0c;这个风靡全球的短视频平台&#xff0c;与虚拟现实&#xff08;VR&#xff09;技术的深度结合&#xff0c;为用户呈现了一场全新的娱乐盛宴。虚拟现实技术为TikTok带来了更丰富、更沉浸的用户体验&#xff0c;标志着全新娱乐时代的开启。本文将深入探讨TikTok…...

PXI/PCIe/VPX机箱 ARM|x86 + FPGA测试测量板卡解决方案

PXI便携式测控系统是一种基于PXI总线的便携式测试测控系统&#xff0c;它填补了现有台式及机架式仪器在外场测控和便携测控应用上的空白&#xff0c;在军工国防、航空航天、兵器电子、船舶舰载等各个领域的外场测控场合和科学试验研究场合都有广泛的应用。由于PXI便携式测控系统…...

ES6 面试题 | 12.精选 ES6 面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

【linux】Debian不能运行sudo的解决

一、问题&#xff1a; sudo: 没有找到有效的 sudoers 资源&#xff0c;退出 sudo: 初始化审计插件 sudoers_audit 出错 二、可用的方法&#xff1a; 出现 "sudo: 没有找到有效的 sudoers 资源&#xff0c;退出" 和 "sudo: 初始化审计插件 sudoers_audit 出错&q…...

讲解ThinkPHP的链式操作

数据库提供的链式操作方法&#xff0c;可以有效的提高数据存取的代码清晰度和开发效率&#xff0c;并且支持所有的CURD操作。 使用也比较简单&#xff0c;假如我们现在要查询一个User表的满足状态为1的前10条记录&#xff0c;并希望按照用户的创建时间排序 Db::table(think_u…...

Java技术栈 —— 微服务框架Spring Cloud —— Ruoyi-Cloud 学习(二)

RuoYi项目开发过程 一、登录功能(鉴权模块)1.1 后端部分1.1.1 什么是JWT?1.1.2 什么是Base64?为什么需要它&#xff1f;1.1.3 SpringBoot注解解析1.1.4 依赖注入和控制反转1.1.5 什么是Restful?1.1.6 Log4j 2、Logpack、SLF4j日志框架1.1.7 如何将项目打包成指定bytecode字节…...

如何进行软件测试和测试驱动开发(TDD)?

1. 软件测试概述 1.1 什么是软件测试&#xff1f; 软件测试是一种评估系统的过程&#xff0c;目的是发现潜在的错误或缺陷。通过对软件进行测试&#xff0c;开发者和测试人员可以确定软件是否符合预期的需求、功能是否正常运行&#xff0c;以及系统是否足够稳定和可靠。 1.2…...

linux 开机启动流程

1.打开电源 2.BIOS 有时间和启动方式 3.启动Systemd 其pid为1 4.挂载引导分区 /boot 5.启动各种服务 如rc.local...

Mybatis 动态SQL的插入操作

需求 : 根据用户的输入情况进行插入 动态SQL:根据需求动态拼接SQL 用户往表中插入数据,有的数据可能不想插入,比如不想让别人知道自己的性别,性别就为空 insert into userinfo(username,password,age,gender,phone) values(?,?,?,?,?); insert into userinfo(username,…...

共建开源新里程:北京航空航天大学OpenHarmony技术俱乐部正式揭牌成立

12月11日,由OpenAtom OpenHarmony(以下简称“OpenHarmony”)项目群技术指导委员会(以下简称“TSC”)和北京航空航天大学共同举办的“OpenHarmony软件工程研讨会暨北京航空航天大学OpenHarmony技术俱乐部成立仪式”在京圆满落幕。 现场大合影 活动当天,多位重量级嘉宾出席了此次…...

企业微信机器人发送文本、图片、文件、markdown、图文信息

import requests import base64 import hashlib import json # 机器人地址的key值 key"811a1652-60e8-4f51-a1d9-231783399ad2" def path2base64(path):"""文件转换为base64:param path: 文件路径:return:"""with open(path, "rb…...

智能优化算法应用:基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.天牛须算法4.实验参数设定5.算法结果6.参考文…...

【Hive】【Hadoop】工作中常操作的笔记-随时添加

文章目录 1、Hive 复制一个表:2、字段级操作3、hdfs 文件统计 1、Hive 复制一个表: 直接Copy文件 create table new_table like table_name;hdfs dfs -get /apps/hive/warehouse/ods.db/table_nameload data local inpath /路径 into table new_table;修复表&#xff1a; m…...

DIY电脑装机机箱风扇安装方法

作为第一次自己diy一台电脑主机的我&#xff0c;在经历了众多的坑中今天来说一下如何安装机箱风扇的问题 一、风扇的数量 1、i3 xx50显卡 就用一个cpu散热风扇即可 2、i5 xx60 一个cpu散热风扇 一个风扇即可 3、i7 xx70 一个cpu散热 4个风扇即可 4、i9 xx80 就需要7个以…...

基础算法(4):排序(4)冒泡排序

1.冒泡排序(BubbleSort)实现 算法步骤&#xff1a;比较相邻的元素。如果第一个比第二个大&#xff0c;就交换。 对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。 这步做完后&#xff0c;最后的元素会是最大的数。 针对所有的元素重复以上的步骤&#…...

鸿蒙开发之网络请求

//需要导入http头文件 import http from ohos.net.http//请求地址url: string http://apis.juhe.cn/simpleWeather/queryText(this.message).maxFontSize(50).minFontSize(10).fontWeight(FontWeight.Bold).onClick(() > {console.log(请求开始)let req http.createHttp()…...

PrimDiffusion:3D 人类生成的体积基元扩散模型NeurIPS 2023

NeurIPS2023 &#xff0c;这是一种用于 3D 人体生成的体积基元扩散模型&#xff0c;可通过离体拓扑实现明确的姿势、视图和形状控制。 PrimDiffusion 对一组紧凑地代表 3D 人体的基元执行扩散和去噪过程。这种生成建模可以实现明确的姿势、视图和形状控制&#xff0c;并能够在…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...