Неверные типы операндов для бинарного оператора && при попытке вычислить дату рождения по текущей дате - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь заставить пользователя ввести 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;
    }

Я получаю "Плохие типы операндов для двоичного оператора &&" Я не могу понять почему, и я довольно новичок в кодировании. Спасибо за любую помощь

Ответы [ 5 ]

2 голосов
/ 05 апреля 2020

Это >=, а не =>, поэтому if(current_date<=1 && current_date>=31)

(не используйте 0 в качестве префикса для чисел, это приводит к тому, что они интерпретируются как восьмеричные)

1 голос
/ 05 апреля 2020

Как я уже упоминал в комментарии, проблема связана с плохим символом => для оператора. Это должно быть >=. Отметьте this , чтобы узнать больше об операторах.

Кроме этого, я вижу серьезную проблему с вашей логикой c. То, как вы проверяете значения даты, является наивным способом сделать это. Я предлагаю вам сделать это с помощью 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.
1 голос
/ 05 апреля 2020

Что вы пытаетесь вернуть сюда? Сколько дней осталось до дня рождения кого-нибудь? Для этого вы можете использовать метод 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);


}
0 голосов
/ 05 апреля 2020

вы получаете ошибку, потому что

вы используете 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;
        }
}
0 голосов
/ 05 апреля 2020

Не проще ли написать функцию, в которой пользователь будет указывать год, месяц и день, и он будет возвращать сколько ему лет? Ниже приведен пример функции, которая делает это.

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();
}
...