java - 使复活节计算器代码更有效的可能方法?
问题描述
这是我复活节计算器的代码。工作正常,想知道是否有办法提高效率(尤其是月份选择部分)。if 语句很长,想知道是否可以使用数组来选择月份。对于将来的参考,像这样的 if 语句将非常耗时,感谢您的反馈。
import java.util.*;
import java.lang.Math;
class Main {
public static void main(String[] args) {
Scanner userInput = new Scanner(System.in);
System.out.println("\nWelcome to the Easter Calculator. Please enter the current year below.");
int y = userInput.nextInt();
int p = y/100;
int q = y - (19*(y/19));
int r = (p-17)/25;
int s = p - (p/4) - ((p-r)/3) + (19*q) + 15;
s = s - (30*(s/30));
s = s - ((s/28)*1-((s/28)*(29/(s+1))*((21-q)/11)));
int t = y + (y/4) + s + 2 - p + (p/4);
t = t - (7*(t/7));
int u = s - t;
int m = 3 + ((u+40)/44);
int d = u + 28 - (31*(m/4));
String month;
if(m == 1){
month = "January";
}
else if(m == 2){
month = "February";
}
else if(m == 3){
month = "March";
}
else if(m == 4){
month = "April";
}
else if(m == 5){
month = "May";
}
else if(m == 6){
month = "June";
}
else if(m == 7){
month = "July";
}
else if(m == 8){
month = "August";
}
else if(m == 9){
month = "September";
}
else if(m == 10){
month = "October";
}
else if(m == 11){
month = "November";
}
else{
month = "December";
}
System.out.println("\nEaster will be on "+month+" "+d+", "+y+".");
}
}
解决方案
可能用最少的代码行最快的解码将是一个字符串数组,我们称之为它monthNames
,包含所有月份的名称。它的长度为 12,并且由于数组索引是基于 0 的,因此您必须以这种方式获取第 1 个月的字符串:String month = monthNames[m-1];
推荐阅读
- node.js - Electron 中使用 http:// 协议而不是 file:// 的安全问题?
- koa - 如何将默认返回状态设置为 200?
- php - 密码命令失败错误与 PhpMailer
- python - 如何在日志记录模块中将单个记录器列入白名单
- c++ - 访问通过引用传递的向量时的行为不一致
- pandas - Pandas 数据框以列中的唯一值作为键和嵌套列表作为值进行 dict
- node.js - Nodejs 应用性能测试最佳工具
- qt - 在信号调用的方法中创建实体时,QEntity 的 setEnabled 无法正常工作
- python - 在请求中将带空格的参数传递给url
- apache-spark - pySpark take() 返回错误:TypeError: 'int' object is not iterable