【问题标题】:Java: Code Runs "Else" Even When "If" Is Correct [duplicate]Java:即使“如果”正确,代码也会运行“其他”[重复]
【发布时间】:2015-04-22 02:38:07
【问题描述】:

我正在尝试制作一个简单的密码保护程序。这个想法是,当您输入正确的密码时,将出现“授予访问权限”消息。如果密码输入错误,则会出现“拒绝访问”消息。这是在 If/Else 语句上运行的。我的程序的问题是,即使我在控制台中输入了正确的密码,else 语句仍在运行。

尽管没有错误,(除了资源泄漏)会发生这种情况。这是我的代码:

import java.util.Scanner;

public class PasswordProtected {
    public static void main (String args[]){
        Scanner Password = new Scanner (System.in);
        String mainpassword, userInput;
        mainpassword = ("bob");
        System.out.println("Please enter the password to continue.");
        userInput = Password.nextLine();
        System.out.println("Verifying Password");
        if (userInput == mainpassword){
            System.out.println("Access Granted");
        }else{
            System.out.println("Access Denied");
        }
    }

}

这是我的控制台在密码正确时产生的结果:

Please enter the password to continue.
bob
Verifying Password
Access Denied

这是我的密码错误时控制台产生的结果:

Please enter the password to continue.
erdtfyhujnikyguj
Verifying Password
Access Denied

谁能向我解释为什么会这样?我的代码错了吗?有人可以帮我解决它吗?

【问题讨论】:

  • 至于重复标记,由于我不知道“.equals”,因此您发送给我的问题将没有用。
  • 不用担心,将问题作为重复项关闭并不意味着您没有进行研究。关键是,您的问题确实归结为该问题,因此它既是您问题的答案,也对未来的访问者更有用。这不是个人的事,只是家务事。
  • @Jake,我不确定你是否考虑过。由于您显然在比较 Java 中的字符串时遇到问题,我会想一个题为“如何比较 Java 中的字符串?”的问题。将是一个相当安全的选择:-) 在任何情况下,作为重复的关闭并不是您问题的 价值的负面指示, 只是它之前被问过和回答过。

标签: java


【解决方案1】:

您应该使用相等函数 (.equals) 来比较对象,而不是 == 运算符。

字符串是对象,因此当您使用 == 运算符时,您检查的是引用而不是内容。

【讨论】:

  • 感谢您的快速响应。它有效,但是我想确保这是正确的方法。我用过 if (userInput.equals(mainpassword)){ System.out.println("Access Granted"); }else{ System.out.println("拒绝访问");这是正确的做法吗?
  • @Jake 是正确的。
  • 另外,这个词应该是references,而不是pointers @ZianChoy :)
【解决方案2】:

在比较 Java 中的字符串等引用类型时,请使用 .equals() 方法而不是 ==。后者将比较对象身份而不是值。

if (userinput.equals(mainpassword))

【讨论】:

  • .equals() 不是运算符 ;)
【解决方案3】:

您正在使用== 运算符来比较不正确的字符串。

试试compareTo字符串方法

if (userInput.compareTo(mainpassword) == 0){
 System.out.println("Access Granted");
} else {
System.out.println("Access Denied");
}
如果 string1 > string 2,则返回

-1 或 1,反之亦然。如果它们相同,则返回零 (0)。但是,如果您有尾随空格或大小写不匹配,则会导致问题。

更好的选择

字符串equals方法

if (userInput.equals(mainpassword)){
 System.out.println("Access Granted");
} else {
System.out.println("Access Denied");
}

当两个字符串包含完全相同的字符串时,equals方法将返回true

【讨论】:

  • @Ashesh compareToalso undesirableequals() 是这里更好的选择。
  • 我给出了两种选择,谢谢你的提及。
  • 投反对票真的很快。
  • 我怀疑投票很快,因为最初的答案有点……错误……不充分。这就是快速回答和稍后修复缺陷的危险:-)
猜你喜欢
  • 2020-09-25
  • 2021-11-28
  • 2016-10-08
  • 1970-01-01
  • 2021-05-05
  • 2016-03-23
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
相关资源
最近更新 更多