作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个程序,可以将日、月和年转换为儒略日。
int year, month, day;
do
{
System.out.print("Enter the year ");
year = keyIn.nextInt();
if(year < 1)
{
System.out.println("Invalid year entered!");
System.out.println(" ");
}
}while(year < 1);
do
{
System.out.print("Enter the month ");
month = keyIn.nextInt();
if(month < 1 || month > 12)
{
System.out.println("Invalid month entered!");
System.out.println(" ");
}
}while(month < 1 || month > 12);
do
{
System.out.print("Enter the day ");
day = keyIn.nextInt();
if(day < 1 ||day > 31)
{
System.out.println("Invalid day entered!");
System.out.println(" ");
}
}while((month == 4 && day > 30) || (month == 2 && day > 29) || day < 1 ||day > 31);
keyIn.close();
int [] daysInAMonth = {31,28,31,30,31,30,31,31,30,31,30,31};
if(year % 4 == 0 && year % 100 != 0)
{
daysInAMonth[1] = 29;
}
else if(year%400==0 && year%100==0)
{
daysInAMonth[1] = 29;
}
else
{
daysInAMonth[1] = 28;
}
int julianDays = 0;
for (int i=0; i < month-1; i++)
{
julianDays += daysInAMonth[i];
}
julianDays += day;
System.out.println("The Julian Day is " +julianDays);
但是,当用户输入诸如 2001 年 3 月 31 日(2001, 4, 31)之类的日期时,我遇到了一些问题,因为 4 月只有 30 天。
有没有更有效的方法来处理这些错误,而不是在用户输入日期时尝试测试 do-while 循环内的所有内容?
最佳答案
我想您的代码的要点是学习如何做类似的事情。出于这个目的,这是可以。
当然,如果我们谈论“现实世界生产”代码,您的代码就不行:
喜欢:
private boolean isYearValid(int year) {
return (year > 1);
}
和
private void boolean isMonthValid(...
但是,当然,要验证日期信息,您还需要传递月份和年份。
这里的要点是:验证日期是一项复杂工作。因此,您无法避免编写使用大量 if/else 检查的复杂代码。但要点是:您仍然应该尝试使代码尽可能可读。
许多人认为拥有有意义的名称的小方法,甚至是简单的事情,例如:
boolean isLeapYear(int year)
将帮助您实现这一目标。因此,您不必将直接验证代码与检查年份是否为闰年的代码混在一起,而只需调用 isLeapYear(year) 即可。这并不会使复杂的检查本身消失,但您可以将其移出验证方法的上下文!
关于java - 如何更有效地处理错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40628230/
我是一名优秀的程序员,十分优秀!