我正在尝试使对问题的“是”(在这种情况下为“ y”)回复为真实陈述。对以下问题的任何其他答复都被称为虚假陈述。
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")) {
^
有人知道我该如何解决吗?我已经在网上搜索过此信息,但不确定。
答案 0 :(得分:7)
无法将String
强制转换为boolean
,而将console.next
行作为String
。检查是否为y,然后将值放入布尔值
String smoker = console.nextLine();
boolean isSmoker = false;
if (smoker.equalsIgnoreCase("y")) {
isSmoker = true;
}
答案 1 :(得分:1)
您在这里有两个问题。
首先,变量smoker
的类型为boolean
。这是原始类型。基本类型不是对象,不能在其上调用方法或属性。因此,您无法编写smoker.someAttribute
或smoking.someMethod()
。这就是为什么您会收到此异常的原因。
第二,您的变量的类型为boolean
,因此您只能对其使用布尔值。但是,您尝试对其影响字符串,则它显然会失败。此错误是第一个错误的隐藏原因。
两个问题的解决方案相同。直接检查控制台输入,或将其传递给String
变量,然后检查此变量值。然后在检查之后,将正确的布尔值影响到smoker
。
直接检查:
boolean smoker = false;
if(console.nextLine().equalsIgnoreCase("y")){
smoker = true;
}
带有String变量
boolean smoker = false;
String consoleInput = console.nextLine();
if(consoleInput.equalsIgnoreCase("y")){
smoker = true;
}