问题解决了。
我班上有两种方法。
private void retrieveDetails(){
List<String> details = File.getCredentials();
username = details.get(0);
pw = details.get(1);
}
private void checkCredentials() throws IOException {
retrieveDetails();
System.out.println("\nPlease enter USERNAME: ");
String usersName = scan.next();
System.out.println("\nPlease enter PASSWORD: ");
String usersPW = scan.next();
System.out.println("\nEntered details: " + usersName + ", " + usersPW);
System.out.println("\nSystems details: " + userName + ", " + pw);
if (usersName.equals(username) && usersPW.equals(pw)) {
doWork();
} else {
System.out.println("Incorrect credentials");
}
}
我认为我通过将以下内容移动到我的字符串初始化的位置来提出解决方案。
List<String> creds = File.getCredentials();
我创建了一个System.out
语句来检查来自retrieveDetails()
的详细信息是否与用户输入的详细信息相匹配。它们匹配 - 但是当系统转到else子句而不是执行doWork();
答案 0 :(得分:0)
当我遇到类似的问题时,我会做这个简单的伎俩:
打印您要比较的字符串的大小,因为有时您会在打印字符串时看到\ n或\ r等字符。
答案 1 :(得分:0)
如果打印的内容相同,请在比较前尝试修剪。例如:
if (usersName.trim().equals(username.trim()) && usersPW.trim().equals(pw.trim())) {
答案 2 :(得分:0)
首先,好像你在下面的sysout语句中有一个拼写错误。
System.out.println("\nEntered details: " + usersName + ", " + usersPW);
System.out.println("\nSystems details: " + userName + ", " + pw); //Should be username
其次,您可能希望修剪字符串以进行更好的字符串比较。 有时从文件或控制台读取的字符串可能包含不需要的和难以捕获的空字符串,如空格和制表符。可以通过在字符串上调用.trim()方法来删除它们。
因此,请尝试使用以下代码:
if (usersName.trim().equals(username.trim()) && usersPW.trim().equals(pw.trim())) {
}
答案 3 :(得分:0)
usersName.equals(username) && usersPW.equals(pw).
我也遇到过这些问题,这种平等总是很棘手,尝试修剪你想要比较的字符串,以及你是否可以比较这些字符串基于它们的长度。
if (usersName.trim().equalsIgnoreCase(username.trim()) && usersPW.trim().equalsIgnoreCase(pw.trim()))
或强>
if (usersName.trim().length()==username.trim().length && usersPW.trim().length()==pw.trim().length))