Товарищи, что не так?

Напишите основной метод, который считывает ваш возраст с клавиатуры, а затем сообщает вам, сколько вам будет лет в 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("Введите правильное число");
  1. Одиночный & квалифицируется как битовый and, надо ставить двойной амперсанд &&
  2. Точка с запятой после 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);
    }

}
→ Ссылка