网站关键词密度是怎么计算的,wordpress 上传pdf,家装设计师培训要多久,中卫市设计院一、输入输出方式#xff1a;Scanner vs BufferedReader
Scanner类
简介#xff1a;Scanner 是 Java 中一个非常方便的用于读取用户输入的类#xff0c;它可以从多种输入源#xff08;如标准输入、文件等#xff09;读取基本数据类型和字符串。
1. Scanner的细节与使用…一、输入输出方式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 是一种强类型语言所有变量都必须先声明其数据类型。常见的数据类型可以分为两类基本数据类型和引用数据类型。
基本数据类型
整数类型byte8 位、short16 位、int32 位、long64 位。浮点类型float32 位、double64 位。字符类型char16 位。布尔类型booleantrue 或 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 中的运算符可以分为以下几类
算术运算符 加法、-减法、*乘法、/除法、%取模。
赋值运算符 赋值、、-、*、/、% 等。
比较运算符 相等、!不相等、大于、小于、大于等于、小于等于。
逻辑运算符 逻辑与、||逻辑或、!逻辑非。
四、 练习AB 问题多种输入方式
使用 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道基础题强化输入输出和数据类型处理。 模拟比赛环境使用在线判题系统如蓝桥杯题库熟悉时间压力。 错题复盘记录每次练习中的错误总结高频陷阱。 如果该文章对你有帮助麻烦给个关注吧