蓝桥杯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中的数组是一种用于存储相同数据类型的元素数据结构。

数据结构的概念理解起来比较抽象,它表示了数据在计算中被组织和存储的形式,而数组呢就是一组按照一定次序排列的数值,数组中的每一个变量被称为元素,比如下图中就是数组的存储形式:

image-20230919170426445

相同数据类型的元素指的是数组中的所有元素都必须是相同的数据类型,也就是说如果创建了一个整型数组,数组里就不能有其他数据类型的存在。

每种数据结构都具有一些特点,我们假设用“班级”这种组织的形式来简单阐述数组的特点:

  • 固定大小:数组一旦声明,其大小通常是固定的,不能在运行时动态更改。就好比开设了一个30人的班级,班级大小已经固定,不能再改变班级的规模。
  • 相同数据类型: 数组中的所有元素必须具有相同的数据类型,假设这个班都是男生或者都是女生,只能有一种性别存在。
  • 连续存储: 数组的元素在内存中是连续存储的,班级里的同学按照顺序就坐,中间没有留空位。
  • 下标访问: 数组中的元素通过下标(索引)进行访问,每个人都有一个学号,学号就是自己的座位,这个学号被称为索引,但是数组里的索引是从0开始的,也就是说,第一个元素的索引是0,第二个元素的索引是1,依次类推

那具体如何在Java中定义和使用数组呢?

Java中声明数组的方式为dataType[] arrayName或者为dataType arrayName[]

dataType arrayName[]更符合C++的编程习惯,但在Java中,往往使用dataType[] arrayName这种形式。

  • dataType表示数组元素的类型,比如intdoublechar等。
  • 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); // 删除第二个元素

不同于数组使用lengthArrayList 使用 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)+" ");}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/242699.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言基础考研向】05 scanf读取标准输入超详解

文章目录 一.scanf函数的原理 样例问题原因解决方法 二.多种数据类型混合输入 错误样例正确样例 一.scanf函数的原理 C语言未提供输入/输出关键字&#xff0c;其输入和输出是通过标准函数库来实现的。C语言通过scanf函数读取键盘输入&#xff0c;键盘输入又被称为标准输入。…

【Docker】未来已来 | Docker技术在云计算、边缘计算领域的应用前景

欢迎来到英杰社区&#xff1a; https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区&#xff1a; https://bbs.csdn.net/topics/617897397 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff…

Spring Boot多环境配置

Spring Boot的针对不同的环境创建不同的配置文件&#xff0c; 语法结构&#xff1a;application-{profile}.properties profile:代表的就是一套环境 1.需求 application-dev.yml 开发环境 端口8090 application-test.yml 测试环境 端口8091 application-pro…

【Python】--- 基础语法(1)

目录 1.变量和表达式2.变量和类型2.1变量是什么2.2变量的语法2.3变量的类型2.3.1整数2.3.2浮点数&#xff08;小数&#xff09;2.3.3字符串2.3.4布尔2.3.5其他 2.4为什么要有这么多类型2.5动态类型特征 3.注释3.1注释的语法3.2注释的规范 结语 1.变量和表达式 对python的学习就…

SpringCloud之Nacos的学习、快速上手

1、什么是Nacos Nacos是阿里的一个开源产品&#xff0c;是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案&#xff0c;用来实现配置中心和服务注册中心。 Nacos 快速开始 2、安装运行nacos nacos下载地址 下载地址: https://github.com/alibaba/nacos/rel…

Linux第33步_TF-A移植的第1步_创建新的设备树

TF-A移植第1步就是创建新的设备树&#xff0c;并命名为“stm32mp157d-atk”。 和“TF-A移植”有关的知识点&#xff1a; 1)设备树英文名字叫做Device tree&#xff0c;用来描述板子硬件信息的&#xff0c;比如开发板上的 CPU有几个核 、每个CPU核主频是多少&#xff0c;IIC、…

使用 MinIO 和 PostgreSQL 简化数据事件

本教程将教您如何使用 Docker 和 Docker Compose 在 MinIO 和 PostgreSQL 之间设置和管理数据事件&#xff0c;也称为存储桶或对象事件。 您可能已经在利用 MinIO 事件与外部服务进行通信&#xff0c;现在您将通过使用 PostgreSQL 自动化和简化数据事件管理来增强数据处理能力…

【C++】STL 算法 - 累加填充算法 ( 元素累加算法 - accumulate 函数 | 元素填充算法 - fill 函数 )

文章目录 一、元素累加算法 - accumulate 函数1、函数原型分析2、代码示例 二、元素填充算法 - fill 函数1、函数原型分析2、代码示例 一、元素累加算法 - accumulate 函数 1、函数原型分析 在 C 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 accu…

2024 年最佳 PDF 编辑器:我的首选清单

在我们日益多设备、跨平台的世界中&#xff0c;PDF 可能比以往任何时候都更有用。有大量免费的 PDF 阅读器可让您审阅和评论这些文件&#xff0c;但不可避免地&#xff0c;您需要具有编辑 PDF 的能力。这通常需要升级到高级 PDF 编辑器。 Adobe Acrobat 是最著名的&#xff0c…

20240119-子数组最小值之和

题目要求 给定一个整数数组 arr&#xff0c;求 min(b) 的总和&#xff0c;其中 b 的范围涵盖 arr 的每个&#xff08;连续&#xff09;子数组。由于答案可能很大&#xff0c;因此返回答案模数 Example 1: Input: arr [3,1,2,4] Output: 17 Explanation: Subarrays are [3]…

Unity3D学习之Unity基础——3D数学

文章目录 1. 前言2 Mathf和Math基础2.1 一般用于只计算一次的函数2.1.1 PI Π PI2.1.2 取绝对值 Abs2.1.3 向上取整 CeilToInt2.1.4 向下取整 FloorToInt2.1.5 钳制函数 Clamp2.1.6 获取最大值 Max2.1.7 获取最小值 Min2.1.8 一个数的n次幂 Pow2.1.9 四舍五入 RoundToInt2.1.10…

苹果Find My可查找添加32件物品,伦茨科技ST17H6x芯片加速产品赋能

苹果最近更新的支持文档证实&#xff0c;从 iOS 16 开始&#xff0c;"Find My"可查找添加物品从16件增加到32件&#xff0c;AirTag 和“查找”网络中的物品利用“查找”网络的强大功能来发挥作用&#xff0c;这个网络由数亿台加密的匿名 Apple 设备构成。“查找”网络…

【Unity】AB包下载

【Unity】AB包下载 1.使用插件打AB包 a.AB包分类 一般地&#xff0c;将预制体作为AB包资源&#xff0c;不仅需要对预制体本身进行归类&#xff0c;还要对其涉及的动画&#xff08;AnimationClip&#xff09;、动画状态机&#xff08;AnimatorController&#xff09;、以及所…

golang学习笔记——http.Handle和http.HandleFunc的区别与type func巧妙运用

文章目录 http.Handle和http.HandleFunc的区别http.Handle分析type func巧妙运用 http.HandleFunc分析总结参考资料 http.Handle和http.HandleFunc的区别 http.Handle和http.HandleFunc的区别体现了Go语言接口的巧妙运用 下面代码启动了一个 http 服务器&#xff0c;监听 808…

Android学习之路(22) 从模块化到组件化

从模块化到组件化 一、从模块化到组件化 Android 应用项目 , 都存在一个应用模块 ( Application Module ) , 在 build.gradle 构建脚本中 , 第一个插件配置 com.android.application , 表明 该 Module 编译打包后的输出是 APK 安装包 ; 该项目可以直接运行 ; plugins {id co…

基础+常用的数据结构

基础 java基础 JDK 和 JRE JDK&#xff0c;它是功能齐全的 Java SDK&#xff0c;是提供给开发者使用&#xff0c;能够创建和编译 Java 程序的开发套件。它包含了 JRE,同时还包含了编译 java 源码的编译器 javac 以及一些其他工具比如 javadoc&#xff08;文档注释工具&#…

AI 的未来是开源的

想象一下&#xff0c;在未来&#xff0c;人工智能不会被锁在公司的金库里&#xff0c;而是由全球创新者社区一砖一瓦地在开放中构建的。协作&#xff0c;而不是竞争&#xff0c;推动进步&#xff0c;道德考虑与原始绩效同等重要。这不是科幻小说&#xff0c;而是人工智能发展核…

代码随想录 Leetcode1047. 删除字符串中的所有相邻重复项

题目&#xff1a; 代码(首刷自解 2024年1月21日&#xff09;&#xff1a; class Solution { public:string removeDuplicates(string s) {if (s.size() < 2) return s;stack<char> t;for (int i 0; i < s.size(); i) {if (t.empty()) t.push(s[i]);else {if (s[i…

广和通AI解决方案“智”赋室外机器人迈向新天地!

大模型趋势下&#xff0c;行业机器人将具备更完善的交互与自主能力&#xff0c;逐步迈向AI 2.0时代&#xff0c;成为人工智能技术全面爆发的重要基础。随着行业智能化&#xff0c;更多机器人应用将从“室内”走向“室外”&#xff0c;承担更多高风险、高智能工作。复杂的室外环…

使用easyexcel 导出多级表头demo

先看效果&#xff1a; 1、引入maven依赖 <!--EasyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version> </dependency> 2、实体类 package com.…