gpt4 book ai didi

java - 如何更有效地处理错误?

转载 作者:行者123 更新时间:2023-11-30 07:02:39 25 4
gpt4 key购买 nike

我编写了一个程序,可以将日、月和年转换为儒略日。

        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 循环内的所有内容?

最佳答案

我想您的代码的要点是学习如何做类似的事情。出于这个目的,这是可以

当然,如果我们谈论“现实世界生产”代码,您的代码就不行:

  1. 您可以避免为标准库中存在的东西重新发明轮子。 Java 实际上有几个日期/时间 API。 (您会考虑使用 Java8 添加的最新功能)
  2. 您应该避免将所有这些代码放在一个地方。反而;您可以创建辅助方法。

喜欢:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com