【问题标题】:"Incompatible operand types int and string"“不兼容的操作数类型 int 和 string”
【发布时间】:2011-10-13 05:58:24
【问题描述】:

我刚开始学习代码(特别是 Java),我正在测试一个密码系统,当你输入密码时,它会变成变量“密码”,它会检查它是否等于密码 2,即实际密码。代码如下:

import java.util.Scanner;

public class LogicalOperators {
    public static void main(String args[]){

        Scanner test = new Scanner(System.in);
        int age;
        int password;
        String password2;
        password2 = "Call of Duty";

        System.out.println("Please enter your age:");
        age = test.nextInt();



            if (age >=18) { 
                System.out.println("You are old enough."); 
                System.out.println("Please enter the password:");
                password = test.nextInt();
                if (password == password2) {
                    System.out.println("Welcome back!");
                }else{
                    System.out.println("The password you typed was incorrect.");
                }

            }else{
                System.out.println("You are too young."); 
            }   



    }   
}

我正在尝试在嵌套 if 语句中检查我输入的密码是否匹配密码 2,“使命召唤”;但问题是它不适用于字符串。这个问题的标题是出现的错误。有人可以帮帮我吗?

【问题讨论】:

  • 这个问题没有结束(这个词在 SO 上有一个非常具体的含义)。如果您的问题已得到解答,只需接受对您最有帮助的答案即可。
  • 要检查两个字符串是否相同,您必须使用.equals 方法而不是检查参考的==。还将密码类型更改为字符串。

标签: java string if-statement int


【解决方案1】:

我试图给出提示而不是提供完整的答案:

检查passwordpassword2的数据类型。为什么它们不同?

【讨论】:

  • 密码是您输入的内容,代码会检查它是否与密码2(即实际密码)匹配。
  • int 密码;字符串密码2; if (password == password2) 总是假的,一个“int”不能等于一个“String”......(事实上它甚至不会编译......你为什么不先修复编译器错误;D )
  • @Daniel: 为什么password 的类型是int?用户只能输入数字吗?
  • 在我把它变成字符串之前,我试图让它与 int 一起工作,但我没有意识到你不能在这样的 if 语句中使用 int 和字符串:3
  • @Daniel:int 有什么意义?那么用户只能输入数字作为密码,而不能等于“使命召唤”。
【解决方案2】:

当比较字符串时,你应该使用 equals 而不是 == 所以用

if(password.equals(password2){
do something
}

【讨论】:

  • 谢谢,我试过了,它工作了,但是空格或大写字母不起作用,因为密码 2 等于“使命召唤”,我在里面输入了它不起作用,我把它改成了“嗨”,它奏效了。
  • 在下面查看我的评论。如果你使用nextLine()方法,你可以得到用户输入的整个字符串以及空格。
【解决方案3】:

您必须进行一些更改。

第一个password 应该是String 类型,因为您想在此处存储一个字符串并将其与另一个字符串进行比较。

接下来,在age = test.nextInt(); 之后,您应该执行test.nextLine() 以在输入末尾使用换行符。当我们读取密码时,我们不想读取这个。

接下来,你应该使用password = test.nextLine();来读取用户输入的密码。

最后,您应该使用:if (password.equals(password2)) 进行比较。 == 比较两个 String 对象是否具有相同的引用,即它们是否是 Java 已知的相同 String 对象。你需要.equals(),因为它会比较两个 String 对象的内容是否相等。在这种情况下,passwordpassword2 指的是两个不同的 String 对象,它们可能具有相同的内容。

【讨论】:

  • test.nextLine() 似乎没有做任何事情,并且将 test.next() 更改为 test.nextLine() 作为密码,因此当您输入正确的年龄时,它会显示“请输入密码:您输入的密码不正确。”
  • 引用我的回复中对解决您遇到的问题很重要的部分:“接下来,在age = test.nextInt(); 之后,您应该在末尾添加test.nextLine() 以使用换行符输入。我们不想在读取密码时读取此内容。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
相关资源
最近更新 更多