Неверные типы операндов для бинарного оператора && при попытке вычислить дату рождения от текущей даты
Я пытаюсь заставить пользователя ввести 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;
}
}