蓝桥杯Java知识准备

Java在算法竞赛中的技巧(蓝桥杯备赛总结) 前言:笔者在这段时间准备蓝桥杯竞赛,由于个人原因选择Java作为语言,刷题中也是不断感到Java有些语法还是不够方便(非常羡慕隔壁C++的STL…),不过有些常见的技巧/方法/模板,也是自己做了些总结,十分之不全面,比完赛会继续完善… !!!!!提交结果时记得检查有无不该加的头文件,主类名是否为Main!!!!!! 2.优化输入输出时间(快速IO模板): import java.io.*; import java.math.BigDecimal; import java.math.BigInteger 阅读详情

1.输入输出

提到了几个IO类,这里推荐使用BufferedReader输入,BufferedWriter输出,当输入输出的数据量大于一百万左右就必须使用快速IO不能直接使用Scanne和System.out.print。

1.1 正常输入输出

输入

首先定义一个Scanner对象,需要导入包:import java.util.Scanner;

单个输入

import java.util.Scanner;

/**
 * @author wld
 * @date 2022/1/19 - 15:31
 */
public class LQ1_InputOutput {
   
   
    public static void main(String[] args) {
   
   
        Scanner in = new Scanner(System.in);
        int i = in.nextInt();
        double d = in.nextDouble();
        String s1 = in.next();      //String类型,遇到空格结束
        String s2 = in.nextLine(); //String类型,读取一行数据,遇到换行结束,类似gets
    }
}

多组输入:使用in.hasNext,返回值是bool值,作用是当在缓冲区内扫描到字符时,会返回true, 否则会发生阻塞,等待数据输入,所以in.hasNext()是不会返回false的。使用 while + in.hasNext() 相当于 while(scanf())。和in.nextXXX()方法类似,in.hasNextXXX()也有针对不同类型变量的方法。

class LQ2_InputOutput{
   
   
    public static void main(String[] args) {
   
   
        Scanner in = new Scanner(System.in);
        double a, b;
        int c;
        while (in.hasNext()){
   
   
            a = in.nextDouble();
            b = in.nextDouble();
            c = in.nextInt();
            System.out.println(a + b + c);
        }
        in.close();
    }
}

输出

  System.out.printf(); //和C/C++中的printf一样。 可使用格式控制符进行格式化输出。
  System.out.printf("%d",a);  // 例如: 输出一个int类型变量
  System.out.print();   //不能使用格式控制符进行格式化输出,仅输出变量
  System.out.println();  //不能使用格式控制符进行格式化输出,仅输出变量,但会自动输出一个换行。

1.2 快速输入输出

1.2.1 StreamTokenizer和PrintWriter

StreamTokenizer这种方式只能读取数字和字符串,不能读取空格和其他字符,不推荐。(如果输入除空格和回车以外的字符,会无法识别,显示成null。同时如果要求输出的是字符,你的输入是数字开头,则字符会变成null;要求是输入数字却输出字母,那么数字会变成0)

PrintWriter类中包含print()、printf()。printf()可用于格式化输出,但速度最慢,write()速度最快。

PS:在最后刷新输出缓冲区,要加上flush(),否则什么都输出不了。

1.2.2 BufferedReader和BufferedWriter

两个都在java.io.*包中。

BufferedReader
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int s1 = in.read(); //读入一个字符,可读入空格回车
String s2 = in.readLine(); //读入一行数据,可读入空格

PS:在windows中按一下回车一共有两个字符“\n\r”,因而要用**两个read()来吸收回车;而只需要一个readLine()**吸收回车。

BufferedWriter

主要使用write()类进行输出,会抛出异常。当数据量大的时候一定要使用这个类进行输出,输出后不会自动换行。

        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));

write()不能直接输出int类型,会输出相应的ASCII码的字符。例如:输出65会显示A。当需要输出一个int变量时,可以使用Integer.toString(int a) 的方法,将其变成字符串形式输出;或者使用+拼接一个字符串。

2. 数组操作

2.1 数组的复制

2.1.1 数组的clone()

int[] a = {
   
   2, 3, 5, 11, 66, 86, 43, 89, 77, 21, 54, 31};
int[] b = new int[20];
b = a.clone();
System.out.println(Arrays.toString(b));
//[2, 3, 5, 11, 66, 86, 43, 89, 77, 21, 54, 31]

2.1.2 System.arraycopy()(重点)

public static void arraycopy(Object src, int srcPos, Object dest, int desPos, int length);//src是源数组,srcPos是源数组的起始下标,dest是目标数组,desPos是目标数组下标,length是复制的数组元素个数

PS:新的数组多余的位置自动补0,且比clone()速度快。

int[] a = {
   
   2, 3, 5, 11, 66, 86, 43, 89, 77, 21, 54, 31};
int[] b = new int[20];
System.arraycopy(a, 0, b, 0, 10);
System.out.println(Arrays.toString(b));
//[2, 3, 5, 11, 66, 86, 43, 89, 77, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

System.arraycopy(a, 0, b, 0, a.length);
System.out.println(Arrays.toString(b));
//[2, 3, 5, 11, 66, 86, 43, 89, 77, 21, 54, 31, 0, 0, 0, 0, 0, 0, 0, 0]

2.1.3 Arrays类的copyOf()和copyOfRange()

copyOf()
public static int[] copyOf(int[] original, int newLength);
//int[]可以是基本类型,也可以是对象类型, original是源数组,newLength是新数组长度

PS:这个b数组的长度是下面的自己定义的长度15,而不像System.arraycopy()中的b长度是一开始定义的长度。

b = Arrays.copyOf(a, 5);
System.out.println(Arrays.toString(b));
//[2, 3, 5, 11, 66]

b = Arrays.copyOf(a, 15);
System.out.println(Arrays.toString(b));
//[2, 3, 5, 11, 66, 86, 43, 89, 77, 21, 54, 31, 0, 0, 0]
copyOfRange()
public static char[] copyOfRange(char[] original, int from, int to);
//char[]可以是基本类型,也可以是对象类型, original是源数组,from是指定复制元素在源数组的起始下标,to是结束下标,不包括
b = Arrays.copyOfRange(a, 2, 7);
System.out.println(Arrays.toString(b));
//[5, 11, 66, 86, 43]

2.2 数组相关操作

Arrays.fill(); //填充数组

int[] arr = new int[5];
Arrays.fill(arr, 4); //给所有值赋值为4
System.out.println(Arrays.toString(arr));
//[4, 4, 4, 4, 4]

Arrays.fill(arr, 1, 4, 7);
System.out.println(Arrays.toString(arr)); //[1,4)下标1开始,4结束不包括4,赋值为7
//[4, 7, 7, 7, 4]

Arrays.sort(); // 数组排序

int[] arr1 =
蓝桥杯Java研究生组-十一届真题 十一届蓝桥杯Java研究生组 阅读详情

相关推荐

2024年蓝桥杯40天打卡总结

蓝桥杯打卡40天总结

weixin_53387320的博客 3473

Wireshark抓包分析:如何从HTTP流量中快速定位黑客攻击痕迹(附pcap文件)

本文通过Wireshark实战,详细解析了如何从HTTP流量中快速定位黑客攻击痕迹。文章提供了核心过滤策略,并重点剖析了如何识别SQL注入攻击的流量特征、揭露WebShell的隐蔽通信以及追踪攻击者在横向移动中的行为,帮助安全人员系统性地从pcap文件中还原完整攻击链。

sprite的博客 1010

别再凭感觉估算!用ADS的EBOND库精确仿真Bonding线寄生电感(附完整参数设置指南)

本文详细介绍了在ADS中使用EBOND库精确仿真Bonding线寄生电感的方法,帮助射频工程师在毫米波频段实现高精度建模。通过三维物理参数和电磁场求解算法,EBOND模型能将误差控制在5%以内,显著提升电路性能。文章还提供了完整的参数设置指南和实战操作步骤,适用于5G毫米波前端模块等高频应用场景。

weixin_28730131的博客 507

Cursor聊天记录迁移工具:实现跨设备AI对话同步与备份

在软件开发中,数据持久化与迁移是常见需求,尤其当工具依赖本地存储时。SQLite作为轻量级关系型数据库,因其嵌入式、零配置特性,常被用于存储应用状态与用户数据。其WAL(预写式日志)模式提升了并发性能,但也增加了数据操作复杂性。通过命令行工具与JSON序列化技术,可以实现结构化数据的提取、转换与安全迁移,这对于保障开发资产的连续性与可移植性具有重要价值。例如,在AI辅助编程场景下,开发者与AI的对话记录包含关键的问题分析、解决方案与决策逻辑,是重要的上下文资产。cursor-chat-transfer工具正

weixin_42551967的博客 534

【26美赛E题 Passive Solar Shading】2026美赛数学建模(MCM/ICM)思路解析及代码分享

本文研究了被动太阳能遮阳(PSS)策略在建筑节能中的应用,针对Sungrove大学(低纬高温)和Borealis大学(高纬寒冷)两种典型气候条件,建立了动态太阳辐射-热平衡模型。通过优化遮阳结构(外檐长度、百叶角度)、窗户布局和内部热质量分布,实现了夏季制冷负荷降低30-40%(Sungrove)和冬季采暖负荷减少15-25%(Borealis)。创新性地采用全天候动态遮阳建模方法,结合热质量优化与储能设计,提出了可适应不同气候条件的建筑节能解决方案,为未来可持续建筑设计提供了量化框架。

一键难忘的博客 953

基于Simulink实现电动汽车电机驱动系统的建模与仿真

通过上述步骤,我们成功实现了基于Simulink的电动汽车电机驱动系统的建模与仿真。该系统能够全面评估电机驱动系统的性能,验证控制策略的有效性,并通过优化设计提高车辆的动力性和效率。引入智能预测:结合人工智能技术,实现更智能的控制策略。扩展功能:增加对多种电机类型的支持,提升系统通用性。实验验证:将仿真模型应用于实际硬件,进行实验验证,评估其在实际工况下的表现。

xiaoheshang_123的博客 318

YOLOv8训练流程-原理解析[目标检测理论篇]

本篇文章主要介绍了YOLOv8训练的流程,主要介绍了Task Aligned Assigner正负样本匹配策略以及YOLOv8的损失计算。

ice 4517

达梦数据库导入报错:[警告]服务器与文件内数据的 CASE_SENSITIVE 参数不匹配,成功终止导入, 但出现警告dimp V8,本地编码:PG_GBK, 导入文件编码:PG_UTF8

达梦数据库管理系统的最新版本是8.0版本,简称DM8。DM8采用全新的体系架构,在保证大型通用的基础上,针对可靠性、高性能、海量数据处理和安全性做了大量的研发和改进工作,极大提升了达梦数据库产品的性能、可靠性、可扩展性,能同时兼顾OLTP和OLAP请求,从根本上提升了DM8产品的品质。达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。[警告]服务器与文件内数据的 CASE_SENSITIVE 参数不匹配,成功终止导入, 但出现警告。4.无视警告,输入y,回车。

十三月的博客 1万+

完整的 Python 数据分析案例:新能源汽车续航里程预测

随着新能源汽车的普及,续航里程成为消费者关注的重要指标。准确预测新能源汽车的续航里程,有助于车企优化电池管理系统、提升车辆性能,也能帮助消费者合理规划出行。本案例将基于新能源汽车的各项参数,如电池容量、行驶速度、环境温度等,构建续航里程预测模型。通过以上改进,可以提高数据处理的准确性、模型的性能和可视化的效果。

daqsdfas的博客 1588

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 计网易错点
下一篇: QueryBuilders中文匹配
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值