IT评测·应用市场-qidao123.com

标题: 蓝桥杯 Java 之输入输出 [打印本页]

作者: 商道如狼道    时间: 2025-3-21 04:30
标题: 蓝桥杯 Java 之输入输出
一、输入输出方式:Scanner vs BufferedReader

Scanner类


1. Scanner的细节与利用场景
适用场景:小规模输入、简朴测试、需要快速开发的场景。
核心方法:
   nextInt():读取整数(以空格/回车分隔)。
  nextDouble():读取双精度浮点数。
  nextLine():读取整行(大概因前序输入残留换行符导致问题)。
  陷阱示例:
   Scanner sc = new Scanner(System.in);
  int a = sc.nextInt();      // 输入后按回车
  String s = sc.nextLine();  // 这里会读取到残留的换行符,导致s为空!
  解决方法:在nextInt()后添加sc.nextLine()清空缓冲区。
  1. import java.util.Scanner;
  2. public class ScannerExample {
  3.     public static void main(String[] args) {
  4.         Scanner scanner = new Scanner(System.in);
  5.         // 读取整数
  6.         int num = scanner.nextInt();
  7.         // 读取字符串
  8.         String str = scanner.nextLine();
  9.         System.out.println("输入的整数是: " + num);
  10.         System.out.println("输入的字符串是: " + str);
  11.         scanner.close();
  12.     }
  13. }
复制代码



BufferedReader类



  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. public class BufferedReaderExample {
  5.     public static void main(String[] args) throws IOException {
  6.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  7.         // 读取一行字符串
  8.         String line = reader.readLine();
  9.         // 将字符串转换为整数
  10.         int num = Integer.parseInt(line);
  11.         System.out.println("输入的整数是: " + num);
  12.         reader.close();
  13.     }
  14. }
复制代码


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 是一种强类型语言,全部变量都必须先声明其数据类型。常见的数据类型可以分为两类:基本数据类型和引用数据类型。

基本数据类型


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的区别(前者先取值后自增)。
引用数据类型


三、 运算符

Java 中的运算符可以分为以下几类:

算术运算符



赋值运算符



比力运算符



逻辑运算符



四、 练习:A+B 问题(多种输入方式)

利用 Scanner

  1. import java.util.Scanner;
  2. public class APlusBWithScanner {
  3.     public static void main(String[] args) {
  4.         Scanner scanner = new Scanner(System.in);
  5.         int a = scanner.nextInt();
  6.         int b = scanner.nextInt();
  7.         int sum = a + b;
  8.         System.out.println(sum);
  9.         scanner.close();
  10.     }
  11. }
复制代码
利用 BufferedReader

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. public class APlusBWithBufferedReader {
  5.     public static void main(String[] args) throws IOException {
  6.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  7.         String[] input = reader.readLine().split(" ");
  8.         int a = Integer.parseInt(input[0]);
  9.         int b = Integer.parseInt(input[1]);
  10.         int sum = a + b;
  11.         System.out.println(sum);
  12.         reader.close();
  13.     }
  14. }
复制代码
  1. import java.text.DecimalFormat;
  2. import java.util.Scanner;
  3. public class CircleArea {
  4.     public static void main(String[] args) {
  5.         Scanner scanner = new Scanner(System.in);
  6.         double radius = scanner.nextDouble();
  7.         double area = Math.PI * radius * radius;
  8.         // 保留两位小数
  9.         DecimalFormat df = new DecimalFormat("#.00");
  10.         System.out.println(df.format(area));
  11.         scanner.close();
  12.     }
  13. }
复制代码

五、 比赛时常错误的点

输入输出方面



数据类型方面



运算符方面



四、比赛高频错误点与避坑指南

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. 快速输入模板(比赛常用)

  1. import java.io.*;
  2. import java.util.*;
  3. public class Main {
  4.     public static void main(String[] args) throws IOException {
  5.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  6.         StringTokenizer st = new StringTokenizer(br.readLine());
  7.         int a = Integer.parseInt(st.nextToken());
  8.         int b = Integer.parseInt(st.nextToken());
  9.         System.out.println(a + b);
  10.     }
  11. }
复制代码
2. 位运算加速本事

快速判断奇偶:(n & 1) == 1。


交换两数:a ^= b; b ^= a; a ^= b;(无需临时变量)。


3. 大数处理处罚

BigInteger:处理处罚超过long范围的整数。


BigDecimal:高精度浮点运算(如金融计算)。

六、总结与备赛建议

核心要点:


输入输出:优先掌握BufferedReader,理解其高效原理。


数据类型:鉴戒溢出和精度问题,必要时利用long或BigDecimal。


运算符:留意整数除法与浮点运算的差别。


备赛策略:


逐日一练:至少完成5道基础题,强化输入输出和数据类型处理处罚。


模拟比赛情况:利用在线判题系统(如蓝桥杯题库)熟悉时间压力。


错题复盘:记录每次练习中的错误,总结高频陷阱。


如果该文章对你有帮助,麻烦给个关注吧!





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4