This question already has answers here:
Why does my if condition not accept an integer in java?

(7个答案)


1年前关闭。




我是Java新手。我正在寻找家庭作业方面的帮助。我最初不会发布完整的代码,但我认为它不会帮助我学习。

我有一个与类(class)一起工作的程序。我有一个可以验证选择内容的类,一个有我的设置者和getter者的类,以及一个由教授用该程序的IO编码的类(这是一本addres书)

我的主要陈述是这样的:
//create new scanner
Scanner ip = new Scanner(System.in);

System.out.println();
int menuNumber = Validator.getInt(ip, "Enter menu number: ", 1, 3);

if (menuNumber = 1)
{
    //print address book
}

else if (menuNumber = 2)
{
    // get input from user
}
else
{
    Exit
}

如果您查看我的if语句if (menuNumber = 1),我会看到一条红线,告诉我我无法将int转换为boolean。我以为答案是if (menuNumber.equals(1)),但这也给了我类似的错误。

我不是100%可以解决此问题的方法,所以我想寻求帮助。我需要将条目转换为字符串吗?现在,我的 validator 看起来像:
if (int < 1)
print "Error entry must be 1, 2 or 3)
else if (int > 3)
print "error entry must 1, 2, or 3)
else
print "invalid entry"

如果我将main转换为字符串而不是int,是否还必须全部更改呢?

再次感谢您对我的帮助,我还没那么出色,我想把大部分的工作都淘汰掉。

最佳答案

if (menuNumber = 1)

应该
if (menuNumber == 1)

前者将值1分配给menuNumber,后者测试menuNumber是否等于1。

收到cannot convert an int to boolean的原因是Java希望if(...)构造中为 boolean 值-但是menuNumberint。表达式menuNumber == 1返回一个 boolean 值,这是需要的。

这是各种语言的常见混淆。我认为您可以设置Java编译器来警告您其他可能发生此错误的情况。

某些语言中使用的技巧是反过来进行比较:(1 == menuNumber),这样,如果您不小心键入=,您将得到编译器错误,而不是无提示的错误。

这被称为Yoda Condition

在Java中,如果使用.equals()方法(不是==)比较对象,则可以使用类似的技巧,并且其中之一可以为null:
if(myString.equals("abc"))

如果NullPointerException为null,则可能会生成myString。但:
if("abc".equals(myString))

将应付,并且如果false为null,则只返回myString

10-01 01:48