如何将nextLine()与String进行比较

时间:2014-10-19 02:01:27

标签: java

我的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资格。

2 个答案:

答案 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);
    }
}