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

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

Решение

Это >= не => так if(current_date<=1 && current_date>=31)

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

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


}

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

Кроме того, я вижу серьезную проблему с вашей логикой. То, как вы проверяете значения даты, - наивный способ сделать это. Я предлагаю вам сделать это с помощью API OOTB, как показано ниже:

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.

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

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

Вы получаете сообщение об ошибке, потому что

ты используешь 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;
        }
}
Другие вопросы по тегам