当前位置: 首页 > 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;并能够在…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...