问题:
我需要一个java方法,传入年份获取字符串描述值。如一个奖项是每两年举办一届,起始年份为2024年首届,26年为第二届,28年为第三届,以此类推。返回第几届问题。
核心处理方式:
届数 = (目标年份 - 起始年份) / 周期 + 1
例如:2026年 → (2026-2024)/2 + 1 = 2 → 第二届
处理工具类:
java
/**
* 计算奖项届数
* 规则:每两年一届,2024年为首届,2026年第二届,以此类推
*
* @param year 目标年份
* @return 届数描述,如"第一届"、"第二届"等
*/
public static String getAwardSession(int year) {
// 起始年份
final int startYear = 2024;
// 举办周期(每2年一届)
final int cycle = 2;
// 检查年份是否合法(必须是偶数年且不小于起始年份)
if (year < startYear) {
return "该年份尚未举办";
}
// 计算与起始年份的差值
int diff = year - startYear;
// 检查是否是举办年份(差值必须是周期的整数倍)
if (diff % cycle != 0) {
return "该年份不举办";
}
// 计算届数(差值除以周期 + 1,因为2024年是第一届)
int session = diff / cycle + 1;
// 转换为中文数字
return "第" + numberToChinese(session) + "届";
}
/**
* 将数字转换为中文数字(支持1-99)
*/
private static String numberToChinese(int num) {
if (num <= 0 || num > 99) {
return String.valueOf(num);
}
String[] chineseDigits = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
String[] chineseUnits = {"", "十", "百"};
if (num < 10) {
return chineseDigits[num];
}
int tens = num / 10;
int ones = num % 10;
StringBuilder result = new StringBuilder();
// 处理十位
if (tens == 1) {
// 10-19,"十"前面不加"一"
result.append(chineseUnits[1]);
} else {
result.append(chineseDigits[tens]).append(chineseUnits[1]);
}
// 处理个位
if (ones > 0) {
result.append(chineseDigits[ones]);
}
return result.toString();
}
// 测试
public static void main(String[] args) {
System.out.println(getAwardSession(2024)); // 第一届
System.out.println(getAwardSession(2026)); // 第二届
System.out.println(getAwardSession(2028)); // 第三届
System.out.println(getAwardSession(2030)); // 第四届
System.out.println(getAwardSession(2025)); // 该年份不举办
System.out.println(getAwardSession(2022)); // 该年份尚未举办
System.out.println(getAwardSession(2042)); // 第十届
}
方法特点:
1、自动校验年份是否合法(必须≥2024且符合举办周期)
2、支持中文数字转换(第一届、第十届、第二十届等)
3、对非举办年份给出明确提示