我的APCS课程中有一项任务,要求我们进行组合锁定,我认为我的基本结构已经失效。但是,我一直遇到一个问题,我无法将原始nextLine()
与String
进行比较。
我想知道nextLine()
是否默认为int
s?或者任何人都可以告诉我我的代码有什么问题?
if((in.nextLine()).compareTo(combo))
{
System.out.println("The lock is now unlocked.");
System.out.println("Please enter the combo to unlock: ");
if((in.nextLine()).compareTo(combo))
{
System.out.println("The lock is now locked.");
}
else
{
System.exit(0);
}
}
P.S。 ide返回错误:“错误:不兼容的类型:int不能转换为boolean”,并且指的是if资格。
答案 0 :(得分:3)
nextLine()
将始终返回一个字符串,因此这不是您的问题。
compareTo(str)
按字典顺序小于要比较的值,则 str
返回负数,如果字符串在词典上相等,则返回0;如果str
在词典上更多,则返回正数而不是与之相比的价值。
您想使用equals(str)
,它返回一个布尔值。
答案 1 :(得分:2)
你的问题是compareTo()返回一个整数值,而不是布尔值。
请参阅compareTo的Java API文档(在可比较的接口,http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html处):
方法详情
compareTo
返回:负整数,零或正整数 因为此对象小于,等于或大于指定的对象 对象
比较两个字符串的最简单方法是使用
if (in.nextLine().equals(combo)) { /* code here */ }
请注意此计划中的另一个陷阱。你的第一个nextLine()和你的第二个nextLine()实际上是两个独立的输入行。 nextLine()返回读者的下一行输入,因此每次调用它时都会返回不同的输入行。解决方案是将nextLine()的结果保存为变量:
String enteredCombo = in.nextLine();
if (enteredCombo.equals(combo))
{
System.out.println("The lock is now unlocked.");
System.out.println("Please enter the combo to lock: ");
enteredCombo = in.nextLine();
if(enteredCombo.equals(combo))
{
System.out.println("The lock is now locked.");
}
else
{
System.exit(0);
}
}