异常处理
在 Java 的异常处理中,throw 关键字用于手动抛出一个异常对象,而 throws 关键字用于声明方法可能抛出的异常。下面详细介绍 Java 的最新异常处理机制及 try-catch-throw 的用法。 1. throw 关键字throw 用于在代码中手动抛出一个异常,通常用于异常检测、错误处理或自定义异常。 throw 的作用throw 关键字的主要作用是手动抛出异常,让程序在遇到错误时主动终止当前代码逻辑,并将异常交给上层代码处理。 在 Java 中,默认情况下,只有系统遇到错误时才会自动抛出异常,比如 NullPointerException、ArithmeticException 等。但有时候,我们需要自己定义错误情况,并主动抛出异常,让调用者知道发生了问题,这时候就用 throw。 语法:1throw new 异常类对象;` 示例: 1234567891011public class ThrowExample { public static void checkAge(int age) { if (age <...
Java数字处理类
此处主要记录使用DecimalFormat格式化浮点数的方法 在Java中,默认格式化形式是: 如果数字大于0.001同时小于10000000,则使用常规小数表示 如果不在这个范围内是用科学计数法 使用DecimalFormat可以格式化浮点数 1. 常见用法1.1 控制小数位数123456789import java.text.DecimalFormat; public class Main { public static void main(String[] args) { DecimalFormat df1 = new DecimalFormat("#.00"); // 保留2位小数(不足补0) DecimalFormat df2 = new DecimalFormat("#.##"); // 保留最多2位小数(不足不补0) System.out.println(df1.format(3.1)); // 输出: 3.10...
Java包装类
和cpp一样,不一样的是Java可以使用super.xxx去调用父类的构造函数和成员函数 1234567891011121314151617181920212223242526272829303132333435363738394041424344import java.math.BigDecimal; import java.math.BigInteger; import java.text.DecimalFormat; import java.util.*; public class Main { static void solve(Scanner sc) { var a = new BigInteger("11234"); var b = new BigInteger("3421"); System.out.println(a.compareTo(b)); } record Move(int k, int...
Java包装类
Java 的包装类(Wrapper Classes)作用Java 的 包装类(Wrapper Class) 主要用于将 基本数据类型(primitive types) 转换为 对象类型(reference types),它们提供了额外的方法,并且在某些情况下是必需的,比如在 集合框架(如 ArrayList) 中存储数据。 1. Java 包装类有哪些?Java 为每种基本数据类型提供了对应的包装类: 基本类型(Primitive Type) 包装类(Wrapper Class) byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean 2. 为什么需要包装类?(1) 在集合(ArrayList、HashMap 等)中存储基本类型Java 集合框架(如 ArrayList、HashMap)不支持基本类型,必须使用对象类型。例如,ArrayList<int>...
IO流 (附带算法竞赛模板)
主要是BufferedReader + StringTokenizer(很快) 算法竞赛模板:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455import java.io.*; import java.math.BigDecimal; import java.math.BigInteger; import java.util.StringTokenizer; public class Main { public static void solve() { } public static void main(String[] args) throws Exception { try (PrintWriter out = new PrintWriter(new...
Educational codeforceRound 173 题解
A1 BC123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151#include<bits/stdc++.h>using namespace std;using i64 = long long;constexpr i64 inf = 1e9 + 7;template<typename T>tuple<T, T, T>...
线段树
对于一个数组,如果想要动态的管理它,就使用线段树把 区间加 & Sum 区间修改, 区间加和求和 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071template<typename T>struct Segment { vector<T> f; vector<T> tag; int n; Segment() {} Segment(int n) : n(n) { f.assign(n << 2 + 1, 0); tag.assign(n << 2 + 1, 0); } void update(int l, int r, T c, int s, int t, int p)...
TCP / UDP
OSI七层网络模型 从下往上 : 物理层, 数据链路层,网络层,运输层, 会话层,表示层,应用层 TCP/ IP 网络协议是什么 在计算机网络要做到井井有条的交换数据,就必须遵守一些事先约定好的规则,比如交换数据的格式、是否需要发送一个应答信息。这些规则被称为网络协议。 为什么要对网络协议分层 简化问题难度和复杂度。由于各层之间独立,我们可以分割大问题为小问题。 灵活性好。当其中一层的技术变化时,只要层间接口关系保持不变,其他层不受影响。 易于实现和维护。 促进标准化工作。分开后,每层功能可以相对简单地被描述![[OSI.png]] 1、UDP 和 TCP 的特点与区别 用户数据报协议 UDP(User Datagram Protocol) 是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。 传输控制协议 TCP(Transmission Control...
Tarjan
强连通分量1234567891011121314151617181920212223242526272829303132vector<int> dfn(n + 1), low(n + 1), f(n + 1);int dfncnt = 0, flag = 0;stack<int> st;auto tarjan = [&](auto self, int u) -> void { dfn[u] = low[u] = ++dfncnt; st.push(u); for (auto v : e[u]) { if (!dfn[v]) { self(self, v); low[u] = min(low[u], low[v]); } else if (f[v] == 0) { low[u] = min(low[u], low[v]); } ...
基环树
图中只存在一个环的图就是基环树,分为有向图和无向图 无向图求基环树可以使用bfs : 先统计入度,然后每次对队列中元素删边,把删后度数为1的点入队,bfs结束后,所有度数 > 1的点就是环上的点,如果只需要求一个点,可以使用dfs,出现了两次的点说明必然有环。 想法1 : 可以通过先找出基环树的环, 之后分别对除了环以外的每个点的子树进行操作,把信息合并到环上,之后问题就集中为处理一个环上问题, 想法2 : 可以先找出基环树的环, 之后删掉基环树上某一条边, 将基环树变成一个树,处理树上问题 寻找环的办法1 : 对于无向图, 使用拓补排序,最后剩下的度数 > 1 的点就是环上的点1 2 : 对于有向图, 使用dfs 寻找,出现了vis两次的点就是环上一个点123456auto check_c = [&](auto self, i64 u) -> int { vis[u] = 1; int now = fa[u]; if (vis[now]) return now; else...
