蓝桥杯 Java 之输入输出
一、输入输出方式:Scanner vs BufferedReader
Scanner类
- 简介:Scanner 是 Java 中一个非常方便的用于读取用户输入的类,它可以从多种输入源(如标准输入、文件等)读取基本数据类型和字符串。
1. Scanner的细节与使用场景
适用场景:小规模输入、简单测试、需要快速开发的场景。
核心方法:
nextInt():读取整数(以空格/回车分隔)。
nextDouble():读取双精度浮点数。
nextLine():读取整行(可能因前序输入残留换行符导致问题)。
陷阱示例:
Scanner sc = new Scanner(System.in);
int a = sc.nextInt(); // 输入后按回车
String s = sc.nextLine(); // 这里会读取到残留的换行符,导致s为空!
解决方法:在nextInt()后添加sc.nextLine()清空缓冲区。
import java.util.Scanner;public class ScannerExample {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 读取整数int num = scanner.nextInt();// 读取字符串String str = scanner.nextLine();System.out.println("输入的整数是: " + num);System.out.println("输入的字符串是: " + str);scanner.close();}}
- 优点:使用简单,提供了丰富的方法来读取不同类型的数据,如 nextInt()、nextDouble()、nextLine() 等。
- 缺点:读取效率相对较低,尤其是在处理大量输入时。
BufferedReader类
- 简介:BufferedReader 是一个字符缓冲输入流,它可以高效地读取字符数据。通常与 InputStreamReader 结合使用,将字节流转换为字符流。
- 使用示例:
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class BufferedReaderExample {public static void main(String[] args) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));// 读取一行字符串String line = reader.readLine();// 将字符串转换为整数int num = Integer.parseInt(line);System.out.println("输入的整数是: " + num);reader.close();}}
- 优点:读取效率高,适合处理大量输入。
- 缺点:使用相对复杂,需要手动处理异常,且只能读取字符串,需要手动进行数据类型转换。
BufferedReader的高效原理
性能优势:通过缓冲减少底层IO操作次数,适合大规模数据输入(如蓝桥杯中的1e5量级)。
常用代码模板:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine(); // 读取整行
String[] parts = line.split(" "); // 按空格分割
int a = Integer.parseInt(parts[0]); // 转换为整数
多行输入处理:
while ((line = br.readLine()) != null) { // 处理到输入结束
// 处理每一行
}
3. 选择建议
比赛场景:优先使用BufferedReader,尤其当题目输入规模大时(如蓝桥杯填空题可能不卡时间,但编程题会)。
调试场景:可用Scanner快速验证逻辑。
二、数据类型
Java 是一种强类型语言,所有变量都必须先声明其数据类型。常见的数据类型可以分为两类:基本数据类型和引用数据类型。
基本数据类型
- 整数类型:byte(8 位)、short(16 位)、int(32 位)、long(64 位)。
- 浮点类型:float(32 位)、double(64 位)。
- 字符类型:char(16 位)。
- 布尔类型:boolean(true 或 false)。
2. 运算符的隐藏陷阱
整数除法:5 / 2 = 2,若需要小数结果,需强制类型转换:
double res = (double)5 / 2; // 2.5
浮点数比较:避免直接使用==,需用误差判断:
double a = 0.1 + 0.2;
if (Math.abs(a - 0.3) < 1e-6) { ... }
自增运算符:i++与++i的区别(前者先取值后自增)。
引用数据类型
- 类:如 String、Date 等。
- 接口。
- 数组。
三、 运算符
Java 中的运算符可以分为以下几类:
算术运算符
- +(加法)、-(减法)、*(乘法)、/(除法)、%(取模)。
赋值运算符
- =(赋值)、+=、-=、*=、/=、%= 等。
比较运算符
- ==(相等)、!=(不相等)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。
逻辑运算符
- &&(逻辑与)、||(逻辑或)、!(逻辑非)。
四、 练习:A+B 问题(多种输入方式)
使用 Scanner
import java.util.Scanner;public class APlusBWithScanner {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int a = scanner.nextInt();int b = scanner.nextInt();int sum = a + b;System.out.println(sum);scanner.close();}}
使用 BufferedReader
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class APlusBWithBufferedReader {public static void main(String[] args) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));String[] input = reader.readLine().split(" ");int a = Integer.parseInt(input[0]);int b = Integer.parseInt(input[1]);int sum = a + b;System.out.println(sum);reader.close();}}
- 练习:计算圆的面积(保留小数)
import java.text.DecimalFormat;import java.util.Scanner;public class CircleArea {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);double radius = scanner.nextDouble();double area = Math.PI * radius * radius;// 保留两位小数DecimalFormat df = new DecimalFormat("#.00");System.out.println(df.format(area));scanner.close();}}
五、 比赛时常错误的点
输入输出方面
- Scanner 读取问题:nextLine() 方法会读取换行符,如果在 nextInt() 等方法后使用 nextLine(),可能会读取到上一次输入的换行符,导致结果不符合预期。可以在 nextInt() 后再调用一次 nextLine() 来消耗换行符。
- BufferedReader 异常处理:使用 BufferedReader 时需要处理 IOException,如果忘记处理会导致编译错误。
- 输出格式:比赛中对输出格式要求严格,如是否需要换行、保留几位小数等,一定要按照题目要求输出。
数据类型方面
- 数据溢出:使用整数类型时,如果数据超出了该类型的取值范围,会导致数据溢出,结果可能不符合预期。可以使用更大范围的数据类型,如 long。
- 浮点精度问题:float 和 double 类型在进行精确计算时可能会出现精度问题,如比较两个浮点数是否相等时,不能直接使用 ==,可以使用一个很小的误差范围来判断。
运算符方面
- 运算符优先级:不同运算符的优先级不同,可能会导致计算结果不符合预期。可以使用括号来明确运算顺序。
四、比赛高频错误点与避坑指南
1. 输入输出类错误
未处理多组输入:题目可能未明确说明输入组数,需用while循环读取。
未关闭流(BufferedReader):虽然蓝桥杯可能不扣分,但实际开发中需调用br.close()。
输入顺序错误:如题目要求先输入字符串后输入数字,顺序不可颠倒。
2. 数据溢出问题
int溢出:计算中间结果可能超出int范围,需改用long。
// 错误:1e9 * 3 = 3e9,超过int范围(2e9)
int a = 1000000000;
int b = a * 3; // 溢出为负数!
// 正确:
long b = (long)a * 3;
3. 浮点数精度陷阱
累加误差:多次浮点运算可能导致误差累积,需用BigDecimal。
BigDecimal sum = new BigDecimal("0");
sum = sum.add(new BigDecimal("0.1")); // 精确计算
4. 输出格式错误
未保留末尾换行:部分题目要求输出后换行,需用println而非print。
多余空格:如输出应为1 2,误写为1 2(多空格)。
五、竞赛技巧与知识扩展
1. 快速输入模板(竞赛常用)
import java.io.*;import java.util.*;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StringTokenizer st = new StringTokenizer(br.readLine());int a = Integer.parseInt(st.nextToken());int b = Integer.parseInt(st.nextToken());System.out.println(a + b);}}
2. 位运算加速技巧
快速判断奇偶:(n & 1) == 1。
交换两数:a ^= b; b ^= a; a ^= b;(无需临时变量)。
3. 大数处理
BigInteger:处理超过long范围的整数。
BigDecimal:高精度浮点运算(如金融计算)。
六、总结与备赛建议
核心要点:
输入输出:优先掌握BufferedReader,理解其高效原理。
数据类型:警惕溢出和精度问题,必要时使用long或BigDecimal。
运算符:注意整数除法与浮点运算的差异。
备赛策略:
每日一练:至少完成5道基础题,强化输入输出和数据类型处理。
模拟比赛环境:使用在线判题系统(如蓝桥杯题库)熟悉时间压力。
错题复盘:记录每次练习中的错误,总结高频陷阱。
如果该文章对你有帮助,麻烦给个关注吧!
相关文章:
蓝桥杯 Java 之输入输出
一、输入输出方式:Scanner vs BufferedReader Scanner类 简介:Scanner 是 Java 中一个非常方便的用于读取用户输入的类,它可以从多种输入源(如标准输入、文件等)读取基本数据类型和字符串。 1. Scanner的细节与使用…...
Kubernetes是什么?为什么它是云原生的基石
从“手工时代”到“自动化工厂” 想象一下,你正在经营一家工厂。在传统模式下,每个工人(服务器)需要手动组装产品(应用),效率低下且容易出错。而Kubernetes(k8s)就像一个…...
@emotion/styled / styled-components创建带有样式的 React 组件
一、安装依赖 npm install emotion/styled styled-components 二、使用 import styled from emotion/styled; import styled from styled-components;// 创建一个带样式的按钮 const StyledButton styled.buttonbackground-color: #4caf50;color: white;padding: 10px 20px…...
Android 常用命令和工具解析之Battery Historian
Batterystats是包含在 Android 框架中的一种工具,用于收集设备上的电池数据。您可以使用adb bugreport命令抓取日志,将收集的电池数据转储到开发机器,并生成可使用 Battery Historian 分析的报告。Battery Historian 会将报告从 Batterystats…...
家用报警器的UML 设计及其在C++和VxWorks 上的实现01
M.W.Richardson 著,liuweiw 译 论文描述了如何运用 UML(统一建模语言)设计一个简单的家用报警器,并实现到 VxWorks 操作系统上。本文分两个部分,第一部分描述了如何用 UML 设计和验证家用报警器的模型,以使…...
k8s常见面试题2
k8s常见面试题2 安全与权限RBAC配置如何保护 Kubernetes 集群的 API Server?如何管理集群中的敏感信息(如密码、密钥)?如何限制容器的权限(如使用 SecurityContext)?如何防止容器逃逸࿰…...
CSS 伪类(Pseudo-classes)的详细介绍
CSS 伪类详解与示例 在日常的前端开发中,CSS 伪类可以帮助我们非常精准地选择元素或其特定状态,从而达到丰富页面表现的目的。本文将详细介绍以下伪类的使用: 表单相关伪类 :checked、:disabled、:enabled、:in-range、:invalid、:optional、…...
将Deepseek接入pycharm 进行AI编程
目录 专栏导读1、进入Deepseek开放平台创建 API key 2、调用 API代码 3、成功4、补充说明多轮对话 总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️🌈 博客主页:请点击——…...
【Ollama】一、介绍
介绍 Ollama 是一个开源项目,专注于提供本地化的大型语言模型(LLM)部署和运行解决方案。它允许用户在本地环境中轻松运行和微调各种开源语言模型(如 LLaMA、Falcon 等),而无需依赖云服务或高性能 GPU。Oll…...
ASP.NET Core JWT
目录 Session的缺点 JWT(Json Web Token) 优点: 登录流程 JWT的基本使用 生成JWT 解码JWT 用JwtSecurityTokenHandler对JWT解码 注意 Session的缺点 对于分布式集群环境,Session数据保存在服务器内存中就不合适了&#…...
查询引擎:它们是什么以及为什么重要
了解查询引擎、它们的优势以及如何简化现代应用程序的数据管理。查询引擎是高效处理和检索数据的强大工具,但并非所有查询引擎都能满足现代应用程序对速度和实时性的需求。在本文中,我们将解析查询引擎的定义、主要优势以及它们如何用于实时数据和AI应用…...
03/29 使用 海康SDK 对接时使用的 MysqlUtils
前言 最近朋友的需求, 是需要使用 海康sdk 连接海康设备, 进行数据的获取, 比如 进出车辆, 进出人员 这一部分是 资源比较贫瘠时的一个 Mysql 工具类 测试用例 public class MysqlUtils {public static String MYSQL_HOST "192.168.31.9";public static int MY…...
2025.2.7 Python开发岗面试复盘
2025.2.7 Python开发岗面试复盘 问题: 是否了解过其他语言? 了解过Java、JavaScript、C等语言,但主要技术栈是Python。 Python跟Java的区别? Python是解释型语言,Java是编译型语言 Python动态类型,Java静态类型 Python简洁易读,Java相对严谨复杂 Python GIL限制并发,Java并…...
一个sql只能有一个order by
ORDER BY 子句在 SQL 中只能出现一次,静态部分和动态部分只能写一个 ORDER BY...
Windows Docker笔记-在容器中运行项目
在文章《Windows Docker笔记-Docker容器操作》中,已经成功创建了容器,也就是建好了工厂,接下来就应该要安装流水线设备,即运行项目达到生产的目的。 在Ubuntu容器中新建项目 这里要新建一个简单的C项目,步骤如下&…...
postgreSQL16.6源码安装
1.获取源码 从PostgreSQL: File Browser获取tar.bz2或者tar.gz源码 2.解压 tar xf postgresql-version.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# tar xf postgresql-16.6.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# ll 总计 24324 drwxr-xr-x 12 ro…...
寒假2.5
题解 web:[网鼎杯 2020 朱雀组]phpweb 打开网址,一直在刷新,并有一段警告 翻译一下 查看源码 每隔五秒钟将会提交一次form1,index.php用post方式提交了两个参数func和p,func的值为date,p的值为Y-m-d h:i:s a 执行fu…...
定期删除一周前的数据,日志表的表空间会增长吗?
即使定期删除一周前的数据,日志表的表空间仍可能持续增长。原因如下: 删除操作不释放空间:DELETE 操作只会标记数据为删除状态,并不会立即释放空间。这些空间可以被后续的 INSERT 操作重用,但不会自动缩减表的总大小。…...
yum 安装mysql
sudo yum install mysql-server sudo systemctl start mysqld sudo systemctl enable mysqld 获取临时 root 密码并登录 MySQL 安装完成后,MySQL 会生成一个临时的 root 密码。你可以通过查看日志文件来找到这个密码: sudo grep ‘temporary password’…...
Servlet笔记(下)
HttpServletRequest对象相关API 获取请求行信息相关(方式,请求的url,协议及版本) | API | 功能解释 | | ----------------------------- | ------------------------------ | | StringBuffer getRequestURL(); | 获取客户端…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
