蓝桥杯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栈之前,先了解一下 栈帧 概念。 栈帧:一个栈帧随着一个方法的调用开始而创建,这个方法调用完成而销毁。栈帧内存放者方…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...
