我正在尝试制作一个简单的密码保护程序。我们的想法是,当您输入正确的密码时,将显示“已授予访问权限”消息。如果输入的密码不正确,则会显示“拒绝访问”消息。这是在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
有人可以向我解释为什么会这样吗?我的代码错了吗?也许有人可以帮我解决一下吗?
答案 0 :(得分:5)
您应该使用相等函数(.equals)来比较对象而不是==运算符。
字符串是对象,因此当您使用==运算符时,您正在检查引用而不是内容。
答案 1 :(得分:1)
在比较Java中的字符串等引用类型时,请使用.equals()
方法而不是==
。后者将比较对象身份而不是值。
if (userinput.equals(mainpassword))
答案 2 :(得分:0)
您正在使用==
运算符来比较不正确的字符串。
尝试compareTo
字符串方法
if (userInput.compareTo(mainpassword) == 0){
System.out.println("Access Granted");
} else {
System.out.println("Access Denied");
}
如果string1>返回-1或1字符串2,反之亦然。如果它们相同,则返回零(0)。但是,如果您有尾随空格或大小写不匹配,则会导致问题。
更好的替代方案
字符串equals
方法
if (userInput.equals(mainpassword)){
System.out.println("Access Granted");
} else {
System.out.println("Access Denied");
}
当两个字符串包含完全相同的字符串时,equals方法将返回true