Присвоение значения переменной с помощью оператора if - PullRequest
0 голосов
/ 08 ноября 2019

Предположим, я хочу присвоить переменной с именем задействовано значение true, если другая переменная, скажем, переменная с именем p, имеет значение от 50 до 150. Как мне это сделать?

Я пробовал следующее:

import java.util.Scanner;

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    int p = scan.nextInt();

    boolean involved; 

    if (p >= 50 && p <= 150) {
        involved = true; 
        System.out.println(included);
    }

}

Однако, когда я пытаюсь это сделать, я получаю сообщение об ошибке: переменная p может небыл инициализирован. Что я делаю не так?

Ответы [ 5 ]

0 голосов
/ 08 ноября 2019

Ваш код выглядит хорошо, за исключением оператора println, который пытается напечатать переменную, которая не существует.

Некоторый момент для улучшения:

  • Сканер должен быть закрыт: мы можем использовать так называемый оператор try-with-resources: try (Scanner scan = new Scanner(System.in)). Это автоматически закроет сканер для вас, как только блок try останется. Более подробная информация здесь: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
  • Как заметил другой пользователь: вместо использования if / else при условном присвоении переменной мы можем использовать просто сравнение в качестве присваивания.

Вот окончательный код:

    public static void main(String[] args) {
        try (Scanner scan = new Scanner(System.in)) {
            int p = scan.nextInt();
            boolean involved = (p >= 50 && p <= 150);
            System.out.println(involved);
        }
    }

Кстати, вы также должны проверить, что значение, введенное пользователем, действительно является целым числом. Если я сейчас введу значение «а», я получу InputMismatchException. Самый простой способ - перехватить это исключение, предоставить пользователю соответствующее сообщение об ошибке и затем выйти из программы.

Вот как я бы это сделал:

    public static void main(String[] args) {
        try (Scanner scan = new Scanner(System.in)) {
            int p;
            try {
                p = scan.nextInt();
            }catch(InputMismatchException e) {
                System.out.println("Value not an integer");
                return;
            }
            boolean involved = (p >= 50 && p <= 150);
            System.out.println(involved);
        }
    }

Надеюсь, это поможет!

0 голосов
/ 08 ноября 2019

Вы также можете сделать это напрямую без if-else:

Scanner scan = new Scanner(System.in);
int p = scan.nextInt();

boolean involved = (p >= 50 && p <= 150);
0 голосов
/ 08 ноября 2019

Либо задействованный записан как ошибочно включенный в ваш код, либо вы намеревались вставить в системную строку строку «включенный»:

        boolean involved; 

        if (p >= 50 && p <= 150) {
            involved = true; 
            System.out.println(involved);
        }

или

boolean involved; 

if (p >= 50 && p <= 150) {
    involved = true; 
    System.out.println("included");
}
0 голосов
/ 08 ноября 2019

Вы можете попробовать это:

Scanner sc = new Scanner(System.in);
boolean involved;
System.out.println("Enter a number: ");
int n = sc.nextInt();

if (n >= 50 && n <= 150) {
    involved = true;
} else {
    involved = false;
}
System.out.println(involved);
0 голосов
/ 08 ноября 2019

Измените System.out.println(included); на System.out.println(involved );. Потому что «включено» не определено.

...