蓝桥杯java基础
数组的倒序与隔位输出
时间限制:1.000S 空间限制:128MB
题目描述
给定一个整数数组,编写一个程序实现以下功能:
1. 将输入的整数数组倒序输出,每个数之间用空格分隔。
2. 从正序数组中,每隔一个单位(即索引为奇数的元素),输出其值,同样用空格分隔。
输入描述
第一行包含一个整数 n,表示数组的长度。
接下来一行包含 n 个整数,表示数组的元素。
输出描述
首先输出倒序排列的数组元素,然后输出正序数组中每隔一个单位的元素。
输入示例
5
2 3 4 5 6
输出示例
6 5 4 3 2
2 4 6
提示信息
数据范围:
1 <= n <= 1000.
数组
在之前的A+B案例中,我们学习了使用int a = 0;
这种形式来表示一个数据,那应该以怎样的形式表示“一组数据”呢?
答案就是数组,Java中的数组是一种用于存储相同数据类型的元素的数据结构。
数据结构的概念理解起来比较抽象,它表示了数据在计算中被组织和存储的形式,而数组呢就是一组按照一定次序排列的数值,数组中的每一个变量被称为元素,比如下图中就是数组的存储形式:
相同数据类型的元素指的是数组中的所有元素都必须是相同的数据类型,也就是说如果创建了一个整型数组,数组里就不能有其他数据类型的存在。
每种数据结构都具有一些特点,我们假设用“班级”这种组织的形式来简单阐述数组的特点:
- 固定大小:数组一旦声明,其大小通常是固定的,不能在运行时动态更改。就好比开设了一个30人的班级,班级大小已经固定,不能再改变班级的规模。
- 相同数据类型: 数组中的所有元素必须具有相同的数据类型,假设这个班都是男生或者都是女生,只能有一种性别存在。
- 连续存储: 数组的元素在内存中是连续存储的,班级里的同学按照顺序就坐,中间没有留空位。
- 下标访问: 数组中的元素通过下标(索引)进行访问,每个人都有一个学号,学号就是自己的座位,这个学号被称为索引,但是数组里的索引是从0开始的,也就是说,第一个元素的索引是0,第二个元素的索引是1,依次类推
那具体如何在Java中定义和使用数组呢?
Java中声明数组的方式为dataType[] arrayName
或者为dataType arrayName[]
dataType arrayName[]
更符合C++的编程习惯,但在Java中,往往使用dataType[] arrayName
这种形式。
dataType
表示数组元素的类型,比如int
、double
、char
等。arrayName
是为数组指定的名称,类似于变量名称。
int[] nums; // 声明一个整数数组
double scores[]; // 声明一个浮点数数组
但上面的操作只是声明了一个数组,既没有为数组指定大小,也没有为数组填充数据,也就是说此时数组在计算机中并没有开辟内存空间,想要为数组分配存储空间,必须对其进行初始化。
Java中的数组可以使用不同的方式进行初始化,包括动态初始化和静态初始化。
在声明数组后,使用 new
关键字来分配内存并初始化数组元素。
int[] numbers = new int[3]; // 动态初始化一个包含3个整数的数组
静态初始化:在声明数组时,同时为数组分配内存并指定初始值
int[] numbers = {1, 2, 3}; // 静态初始化一个包含初始值的整数数组
访问数组中的元素,您可以使用下标操作符 []
,请注意,下标从0开始,直到数组长度的前一位。
int value = arr[2]; // 获取数组 arr 的第三个元素的值,即 3
除了访问元素,还可以通过下标操作符 []
修改数组中的元素的值。
arr[0] = 100; // 修改数组 arr 的第一个元素的值为 100
所有的数组都拥有一个属性 length
, 用于获取数组的长度,表示数组中元素的数量。例如:
int[] nums = {1, 2, 3};
int length = nums.length; // 获取数组的长度(值为3)
⚠️ 当数组越界时,Java会抛出运行时错误(异常)
int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) {System.out.println(numbers[i]);
}
以上,我们通过一些简短的代码知道了数组的定义、特点、声明方式、访问方式和遍历方式,以及数组使用中容易出错的地方。
ArrayList
数组的长度是固定的,但是我们往往并不知道一组数据的大小,这个时候直接使用数组并不太满足需求,可以考虑使用ArrayList
。在Java中,ArrayList
是 java.util
包中的一个类,可以在运行时对其动态添加和删除元素以满足我们的操作需要。
使用前需要在代码中导入 ArrayList
类,如下所示:
import java.util.ArrayList;
您可以通过以下方式创建一个 ArrayList
:
集合类只能存储对象而不是原始数据类型。
ArrayList<Integer> nums = new ArrayList<Integer>();
想要为 ArrayList
添加元素,需要使用add
方法
nums.add(10);
nums.add(100);
nums.add(1000);
想要获取 ArrayList
中的元素,需要使用 get
方法,和[]
类似,索引从0开始
int firstNumber = nums.get(0); // 获取第一个元素 1
使用 remove(index)
方法来删除 ArrayList
中的对应索引的元素。
nums.remove(1); // 删除第二个元素
不同于数组使用length
, ArrayList
使用 size
方法来获取 中的元素数量。
int size = nums.size(); // 获取 ArrayList 的大小
在数组中,我们通过for循环
完成了对数组的遍历,ArrayList
遍历的方式是一样的。
for (int i = 0; i < nums.size(); i++) {System.out.println(nums.get(i));
}
for (Integer num : nums) {System.out.println(num);
}
以上就是关于ArrayList
的一些使用介绍,可能刚开始接触,会觉得对数组和ArrayList
的相关操作有点多,看完一遍后只觉得走马观花无法全部记住,但没关系,只需要留个印象,这些内容我们会经常使用,可以在实践中不断增进对这些内容的理解。
倒序输出数组
绕了一大圈子,我们终于回归到题目本身了,题目的第一个要求是实现将输入的整数数组倒序输出,每个数之间用空格分隔。
根据题目要求,我们可以写出基础的代码:
import java.util.Scanner;public class Main {public static void main(String[] args) {// 定义一个整型ArrayListScanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 输入数组长度}
}
输入n之后,我们可以按照要求定义一个大小为n的整数数组
int[] nums = new int[n]; // 声明一个大小为 n 的整数数组
对数组进行遍历,输入数组元素
// 循环输入数组中的数字
for(int i = 0; i < n; i++) {nums[i] = scanner.nextInt();
}
倒序输出数组,只需要从数组的最后一位倒着遍历即可
// 倒序输出数组元素,每个数之间用空格分隔
for (int i = nums.length - 1; i >= 0; i--) {System.out.print(nums[i]);if (i > 0) {System.out.print(" ");}}
完整的代码如下:
import java.util.Scanner;public class Main {public static void main(String[] args) {// 定义一个整型ArrayListScanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 输入数组长度int[] nums = new int[n];// 循环输入数组中的数字for(int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}// 倒序输出数组元素,每个数之间用空格分隔,使用size()表示ArrayList的大小for (int i = nums.length - 1; i >= 0; i--) {System.out.print(nums[i]);if (i > 0) {System.out.print(" ");}}// 关闭Scannerscanner.close();}
}
如果使用ArrayList
呢,又应该怎么写呢?
首先先引入ArrayList
, 并定义一个ArrayList
import java.util.ArrayList;
import java.util.Scanner;public class Main {public static void main(String[] args) {// 定义一个整型ArrayListArrayList<Integer> nums = new ArrayList<Integer>();Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 输入数组长度}
}
接着我们使用while循环代替for循环,控制n及n个数据的输入
// 循环输入数组中的数字
while (n-- > 0) {while (scanner.hasNextInt()) {int num = scanner.nextInt();// 使用add方法动态添加数组元素nums.add(num);}
}
和数组类似,依旧是从ArrayList
的最后一个元素开始倒序遍历,不过我们可以使用size()
表示长度
for (int i = nums.size() - 1; i >= 0; i--) {System.out.print(nums.get(i));if (i > 0) {System.out.print(" ");}
}
完整的代码如下:
import java.util.ArrayList;
import java.util.Scanner;public class Main {public static void main(String[] args) {// 定义一个整型ArrayListArrayList<Integer> nums = new ArrayList<Integer>();Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 输入数组长度// 循环输入数组中的数字while (n-- > 0) {while (scanner.hasNextInt()) {int num = scanner.nextInt();// 使用add方法动态添加数组元素nums.add(num);}}// 倒序输出数组元素,每个数之间用空格分隔,使用size()表示ArrayList的大小for (int i = nums.size() - 1; i >= 0; i--) {System.out.print(nums.get(i));if (i > 0) {System.out.print(" ");}}System.out.println(); // 换行// 关闭Scannerscanner.close();}
}
除了普通的for循环遍历,你还可以使用增强型 for
循环或来遍历 ArrayList
中的元素,结构如下,这种方式更为简洁和易读,基本语法如下:
for (elementType element : collection) {// 在此处处理 element
}
elementType
是元素的数据类型element
是在每次迭代中表示一个元素的变量collection
是要迭代的数组或其他的对象(比如后面讲到的集合)
for (String name : names) {System.out.println(name);
java代码实现:
import java.util.Scanner;
import java.util.ArrayList;
public class Main{public static void main(String[] args){ArrayList<Integer> nums=new ArrayList<Integer>();Scanner sc=new Scanner(System.in);int n=sc.nextInt();int a[]=new int[n];for(int i=0;i<n;i++){int num=sc.nextInt();nums.add(num);}for(int i=nums.size()-1;i>=0;i--){System.out.print(nums.get(i)+" ");}System.out.println();for(int i=0;i<nums.size();i+=2){System.out.print(nums.get(i)+" ");}}}
相关文章:

蓝桥杯java基础
数组的倒序与隔位输出 时间限制:1.000S 空间限制:128MB 题目描述 给定一个整数数组,编写一个程序实现以下功能: 1. 将输入的整数数组倒序输出,每个数之间用空格分隔。 2. 从正序数组中,每隔一个单位&a…...

Unity3d引擎中使用AIGC生成的360全景图(天空盒)
前言 在这里与Skybox AI一起,一键打造体验无限的360世界,这是这个AIGC一键生成全景图的网站欢迎语。 刚使用它是23年中旬,在没有空去给客户实地拍摄全景图时,可以快速用它生成一些相关的全景图,用作前期沟通的VR de…...

React Router v6 改变页面Title
先说正事再闲聊 1、在路由表加个title字段 2、在index包裹路由 3、在App设置title 闲聊: 看到小黄波浪线了没 就是说默认不支持title字段了 出来的提示, 所以我本来是像下面这样搞的,就是感觉有点难维护,就还是用上面的方法了 …...

postman测试导入文件
01 上传文件参数 1.选择请求方式 选择post请求方式,输入请求地址 2.填写Headers Key:Content-Type ; Value:multipart/form-data 如下图 3.填写body 选择form-data,key选择file类型后value会出现按钮࿰…...

ZigBee学习(一)
文章目录 一、ZigBee介绍二、IEEE 802.15.42.1 物理层2.2 MAC层2.3 如何实现网络和设备寻址2.4 能量管理 三、ZigBee网络拓扑结构四、ZigBee配置参数 一、ZigBee介绍 ZigBee是一种基于IEEE 802.15.4标准的高级通信协议,它被设计用于低速率、低功耗和短距离无线通信&…...

Unity—配置lua环境变量+VSCode 搭建 Lua 开发环境
每日一句:保持须臾的浪漫,理想的喧嚣,平等的热情 Windows 11下配置lua环境变量 一、lua-5.4.4版本安装到本地电脑 链接:https://pan.baidu.com/s/14pAlOjhzz2_jmvpRZf9u6Q?pwdhd4s 提取码:hd4s 二、高级系统设置 此电…...
前端-云点播技术
一、简介 云点播(Cloud Video On Demand)是一种基于云计算平台提供的视频点播服务。这种服务允许用户在需要的时候按需观看视频内容,而无需等待下载完成。以下是一些关于云点播技术的常见特征和要点: 存储和管理: 云存…...

k8s---ingress对外服务(traefik)
目录 ingress的证书访问 traefik traefik的部署方式: deamonset deployment nginx-ingress与traefix-ingress相比较 nginx-ingress-controller ui访问 deployment部署 ingress的证书访问 ingress实现https代理访问: 需要证书和密钥 创建证书 密钥 secre…...

MySQL-SQL-DQL
DQL-介绍 DQL-语法 基本查询 1、查询多个字段 2、设置别名 3、去除重复记录 条件查询 1、语法 2、条件 聚合函数 1、介绍 2、常见的聚合函数 3、语法 分组查询 1、语法 2、where与having区别 排序查询 1、语法 2、排序方式 分页查询 1、语法 DQL-执行顺序...

Docker(十四)Etcd 项目
作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! etcd etcd 是 CoreOS 团队发起的一个管理配置信息和服务发现(Service Discovery)的项目,在这一章里面&a…...

EtherNet/IP开发:C++开发CIP源代码
① 介绍一下CIP CIP是一种考虑到自动化行业而设计的通用协议。然而,由于其开放性,它可以并且已经应用于更多的领域。CIP网络库包含若干卷: 第1卷介绍了适用于所有网络自适应的CIP的常见方面。本卷包含通用对象库和设备配置文件库࿰…...
【算法题】68. 文本左右对齐
题目 给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必…...
PHP 调用 e 签宝接口签名指南
前言 在 401 问题上卡了 一段时间,参考官网文档和鉴权签名计算测试也试了很久,签名确定是没错的,但是一直提示 INVALID_SIGNATURE 其实问题在于我忽略了 公共请求头格式 中 Content-MD5 部分的一句话: GET 和 DELETE 请求且 Bod…...

穿越Flink的时间隧道:解锁实时数据之窗,掌握流处理之巅
目录 Flink中的时间和窗口 1时间语义 1.1Flink中的时间语义 1.1.1处理时间 1.1.2事件时间 1.2那种时间语义更重要 2 水位线 2.1 事件时间和窗口 2.2 什么是水位线 2.3 如何生成水位线 2.3.1使用WatermarkGenerator 2.3.2使用SourceFunction 2.4 水位线的传递 2.5 水位…...

服务器与Ajax
1.初识Ajax Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 术语ajax最早产生于2005年,Ajax表示Asynchronous JavaScript and XML(异步JavaScript和XML),但是它不是像HTML、JavaScript或CSS这样的一种“正式的”技…...

Electron项目架构方案心得
这里只记录FE的业务流程设计考虑和Electron的业务流程考虑。 一个electron客户端,理想的架构是,底层的能力支持完全由electron底层模块支持。关于electron底层模块的支持,不限于node packages 或者 dll 或者 rust实现的一些东东。而业务流程…...

Java中创建List接口、ArrayList类和LinkedList类的常用方法(一)
List接口 要了解List接口,就不得不说起Java的集合框架。 (该图来自菜鸟教程) Collection接口和Map接口 Java 集合框架主要包括两种类型的容器,集合Collection和图Map。 Collection接口代表了单列集合,它包含了一组…...

顶级开源社区开发者体验实践分享
实践一:开发者贡献指南 实践二:Dev Container Setup(bonus) 实践三:Good First Issues 实践三:Good Second Issues(bonus) 实践四:RFC 机制 实践五:完善 CI I…...

STM32之RTC实时时钟
一、实时时钟概述 1、实时时钟介绍 英文缩写:RTC。显示年、月、日、时、分、秒、星期,自动计算闰年,能够区分每个月的天数。 RTC特点:能从RTC获取到具体的日期时间,断掉后再开机时间仍然准确(需要纽扣电池ÿ…...

Java JVM 堆、栈、方法区详解
目录 1. 栈 2. 堆 3. 方法区 4. 本地方法栈 5. 程序计数器 首先来看一下JVM运行时数据区有哪些。 1. 栈 在介绍JVM栈之前,先了解一下 栈帧 概念。 栈帧:一个栈帧随着一个方法的调用开始而创建,这个方法调用完成而销毁。栈帧内存放者方…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...