我是Java新手。我正在寻找家庭作业的帮助。我不会发布我最初做的完整代码,但我不认为它会帮助我学习它。
我有一个使用类的程序。我有一个类将验证一个选择和一个有我的setter和getter的类,以及一个教授用该程序的IO编写的类(这是一个地址簿)
我的主要声明就是这样说的
//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%就我能做些什么来修复它所以我想寻求帮助。我需要将我的条目转换为字符串吗?现在我的验证器看起来像:
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,我不得不改变这一切吗?
再次感谢你帮助我,我没有那么棒,而且我希望得到一大部分作业被淘汰出局。
答案 0 :(得分:13)
if (menuNumber = 1)
应该是
if (menuNumber == 1)
前者将值1赋给menuNumber
,后者测试menuNumber
是否等于1。
获得cannot convert an int to boolean
的原因是Java期望if(...)
构造中的布尔值 - 但menuNumber
是int
。表达式menuNumber == 1
返回一个布尔值,这是所需要的。
这是各种语言的常见混淆。我认为您可以设置Java编译器以警告您此错误的其他可能情况。
在某些语言中使用的技巧是以相反的方式进行比较:(1 == menuNumber)
因此,如果您不小心输入=
,您将收到编译器错误而不是静默错误。
这称为Yoda Condition。
在Java中,如果使用.equals()
方法(而不是==
)比较对象,则可以使用类似的技巧,其中一个可以为null:
if(myString.equals("abc"))
如果NullPointerException
为空,可能会生成myString
。但是:
if("abc".equals(myString))
将会处理,如果false
为空,则会返回myString
。
答案 1 :(得分:3)
我得到一条红线,告诉我我无法将int转换为布尔值。
多数民众赞成因为=
是一个赋值运算符。您需要使用的是==
运算符。
答案 2 :(得分:2)
单个等号是赋值:您以这种方式为变量赋值。使用两个等号(==)进行比较:
if ($menuNumber = 1) {
更新:忘记美元符号:$menuNumber