0

我试图让用户输入 YR MON DAY,然后系统根据提供的输入计算当前年龄并在屏幕上显示年龄。

这是我的代码的开头:

static void checkAgeFormat(int current_date, int current_month,
                            int current_year, int birth_date,
                            int birth_month, int birth_year) {
    int f = 0;
    if(current_date <= 01 && current_date => 31) {
        System.out.println("Invalid current_date");
        f = 1;
    }

我得到一个“二进制运算符 && 的错误操作数类型”我不知道为什么,而且我对编码还很陌生。谢谢你的帮助

4

5 回答 5

2

>=并非=>如此 _if(current_date<=1 && current_date>=31)

(不要使用 0 作为数字的前缀,这会导致它们被解释为八进制)

于 2020-04-05T19:32:30.823 回答
1

你想在这里返回什么?离某人生日还有多少天?你可以使用类的between()方法Period

static void checkAgeFormat(int current_date, int current_month,
                            int current_year, int birth_date,
                            int birth_month, int birth_year) {
LocalDate birthDate = LocalDate.of(birth_year, birth_month, birth_date);
long daysLeft = Period.between(LocalDate.now(), birthDate).get(ChronoUnit.DAYS);


}
于 2020-04-05T20:21:24.540 回答
1

正如我在评论中已经提到的那样,=>对于操作员来说,问题是因为符号不好。应该是>=。检查以了解有关运算符的更多信息。

除此之外,我可以看到您的逻辑存在严重问题。您验证日期值的方式是一种天真的方式。我建议您使用 OOTB API 来执行此操作,如下所示:

import java.time.DateTimeException;
import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        // Tests
        checkAgeFormat(45, 10, 2017, 10, 10, 2010);
        checkAgeFormat(30, 2, 2017, 10, 10, 2010);
        checkAgeFormat(31, 4, 2017, 10, 10, 2010);
        checkAgeFormat(30, 15, 2017, 10, 10, 2010);
        checkAgeFormat(30, 4, 2020, 10, 10, 2010);
    }

    static void checkAgeFormat(int current_day, int current_month, int current_year, int birth_day, int birth_month,
            int birth_year) {
        int f = 0;
        LocalDate currentDate, birthDate;
        try {
            currentDate = LocalDate.of(current_year, current_month, current_day);
            birthDate = LocalDate.of(birth_year, birth_month, birth_day);
            System.out.println("If you see this line printed, the date values are correct.");
            // ...Rest of the code
        } catch (DateTimeException e) {
            System.out.println(e.getMessage());
            f = 1;
        }
        // ...Rest of code
    }
}

输出:

Invalid value for DayOfMonth (valid values 1 - 28/31): 45
Invalid date 'FEBRUARY 30'
Invalid date 'APRIL 31'
Invalid value for MonthOfYear (valid values 1 - 12): 15
If you see this line printed, the date values are correct.
于 2020-04-05T20:22:03.667 回答
0

编写一个用户提供年、月和日并返回用户年龄的函数不是更容易吗?下面是执行此操作的函数示例。

public static int getYears(int year, int month, int day)
{
    LocalDate yearOfBirth = LocalDate.of(year, month, day);
    LocalDate currentDate = LocalDate.now();
    Period period = Period.between(yearOfBirth, currentDate);
    return period.getYears();
}
于 2020-04-05T19:45:07.237 回答
-1

您收到错误是因为

您正在使用if (current_date <= 01 && current_date =>31)而不是

if (current_date <= 01 && current_date >=31)

编辑您的代码后将是:

static void checkAgeFormat(int current_date, int current_month, int current_year, int birth_date, int birth_month, int birth_year) {

        int f=0
        if (current_date <= 01 && current_date >=31){
            System.out.println("Invalid current_date");
            f=1;
        }
}
于 2020-04-05T19:56:05.280 回答