Логические значения, операторы if-else и сканер? - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь сделать ответ «да» (или «у» в данном случае) правдивым. Известно, что любой другой ответ на приведенный ниже вопрос является ложным утверждением.

System.out.print("Do you smoke?(y/n): ");
        boolean smoker = console.nextBoolean();
        if (smoker.equalsIgnoreCase("y")) {
            smoker = true;
        } else {
            smoker = false;
        }

Я получаю ошибку

HealthPlan.java:32: error: boolean cannot be dereferenced
        if (smoker.equalsIgnoreCase("y")) {
              ^

Кто-нибудь знает, как я могу это исправить? Я искал это онлайн, и я не уверен.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

У вас есть две проблемы здесь.

Сначала ваша переменная smoker имеет тип boolean. Который является примитивным типом. Примитивный тип не является объектом, вы не можете вызвать метод или атрибут для него. Таким образом, вы не можете написать smoker.someAttribute или smoking.someMethod(). Вот почему вы получаете это исключение.

Во-вторых, ваша переменная имеет тип boolean, поэтому вы можете влиять только на логическое значение. Но вы пытаетесь повлиять на строку, она, очевидно, потерпит неудачу. Эта ошибка является скрытой причиной первой.


Решение одинаково для обеих проблем. Либо проверьте непосредственно вход консоли, либо передайте его переменной String, а затем проверьте значение этой переменной. Затем после проверки измените правильное логическое значение на smoker.

При прямой проверке:

boolean smoker = false;
if(console.nextLine().equalsIgnoreCase("y")){
    smoker = true;
}

со строковой переменной

boolean smoker = false;
String consoleInput = console.nextLine();
if(consoleInput.equalsIgnoreCase("y")){
    smoker = true;
}
0 голосов
/ 25 июня 2018

Невозможно привести String к boolean, поймать линию console.next как String. Проверьте, является ли это y, и затем поместите значение в логическое значение

String smoker = console.nextLine();
boolean isSmoker = false;
if (smoker.equalsIgnoreCase("y")) {
    isSmoker = true;
}
...