0

问题解决了。

我的课堂上有两种方法。

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();

4

4 回答 4

0

当我有类似的问题时,我会做这个简单的技巧:

打印您正在比较的字符串的大小,因为有时您有像 \n 或 \r 这样的字符,当您打印字符串时这些字符是不可见的。

于 2013-02-16T12:34:46.210 回答
0

如果打印的内容相同,则在比较之前尝试修剪。例如:

if (usersName.trim().equals(username.trim()) && usersPW.trim().equals(pw.trim())) {

于 2013-02-16T12:36:39.607 回答
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())) {
}
于 2013-02-16T12:41:30.523 回答
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))

于 2013-02-16T12:43:04.607 回答