Товарищи, что не так?
Напишите основной метод, который считывает ваш возраст с клавиатуры, а затем сообщает вам, сколько вам будет лет в 2050 году. Программа должна запрашивать возраст несколько раз, если не было введено число от 0 до 100. Предположим, что целое число всегда вводится.
package uebung9;
import java.util.Scanner;
public class Alter {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Сколько вам лет?");
int old = scan.nextInt();
if (old <1 & old>100);
System.out.println("Введите правильное число");
int year = scan.nextInt();
int a = 2050-year;
System.out.println(a);
}
}
Ответы (2 шт):
Автор решения: Barmaley Red Star
→ Ссылка
Корень зла таится здесь:
if (old <1 & old>100);
System.out.println("Введите правильное число");
- Одиночный
&квалифицируется как битовыйand, надо ставить двойной амперсанд&& - Точка с запятой после
ifквалифицируется как конецif
Правильный код:
if (old <1 && old>100)
System.out.println("Введите правильное число");
Update
if (old <1 || old>100)
System.out.println("Введите правильное число");
Автор решения: Дмитрий
→ Ссылка
В вашем варианте проще перечислить, что написано правильно, чем перечислить, что написано неправильно. Единственное, что я совсем не могу понять, как вы пришли к этому int a = 2050-year; вот предположим вам 25 лет. Тогда по вашей логике в 2050 году вам будет 2025 лет. Поздравляю, вы долгожитель!
import java.time.LocalDate;
import java.util.Scanner;
public class Alter {
private final static int futureYear = 2050;
public static void main(String[] args) {
System.out.println("Сколько вам лет?");
Scanner scan = new Scanner(System.in);
while (true) {
try {
System.out.println("В " + futureYear + " вам будет " + calculateAge(scan.nextLine(), futureYear));
break;
} catch (NumberFormatException e) {
System.out.println("Введите правильное число");
}
}
}
private static int calculateAge(String yearsOld, int futureYear) {
int intYearsOld = Integer.valueOf(yearsOld);
if (intYearsOld < 1 || intYearsOld > 100) throw new NumberFormatException();
return futureYear - (LocalDate.now().getYear() - intYearsOld);
}
}