Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么LineNumberReader在Java中总是返回零?_Java - Fatal编程技术网

为什么LineNumberReader在Java中总是返回零?

为什么LineNumberReader在Java中总是返回零?,java,Java,我编写了以下代码来读取两个不同的文本文件。一个文本文件称为“用户名”文本文件,另一个称为“密码”文本文件。我正在创建一个登录程序。为了让用户成功登录,用户名的行号必须与密码的行号匹配。然而,出于某种原因,我的两个文件的LineNumberReader都被固定在零,这很奇怪,因为我使用断言来避免这种情况,并且断言没有抛出错误。我知道它们是零,因为我打印了每个阅读器。即使我故意输入了错误的用户名密码匹配,它也会不断打印出“找到匹配项”。有人能弄明白吗 public boolean usern

我编写了以下代码来读取两个不同的文本文件。一个文本文件称为“用户名”文本文件,另一个称为“密码”文本文件。我正在创建一个登录程序。为了让用户成功登录,用户名的行号必须与密码的行号匹配。然而,出于某种原因,我的两个文件的LineNumberReader都被固定在零,这很奇怪,因为我使用断言来避免这种情况,并且断言没有抛出错误。我知道它们是零,因为我打印了每个阅读器。即使我故意输入了错误的用户名密码匹配,它也会不断打印出“找到匹配项”。有人能弄明白吗

    public boolean usernamePasswordCheck(String username, String password) throws         FileNotFoundException, IOException{
    BufferedReader br = new BufferedReader(new FileReader("src/BioStat/username.txt"));
    BufferedReader br2 = new BufferedReader(new FileReader("src/BioStat/password.txt"));
    String line;
    String line2;
    int userLine=0;
    int passwordLine=0;
    LineNumberReader lnr = new LineNumberReader(new FileReader("src/BioStat/username.txt"));
    LineNumberReader lnr2 = new LineNumberReader(new FileReader("src/BioStat/password.txt"));
    while((line=br.readLine())!=null){
        if(line.equals(username)){
            //username is found in username list. There is a match!
            //let's get it's line number
            userLine = lnr.getLineNumber();
        }else{
            //username was not found in list, so we should keep reading.
            line = br.readLine();
        }
    }
    System.out.println("Userline: "+userLine);
    br.close();
    while((line2 = br2.readLine())!=null){
        if(line2.equals(password)){
            //username is found in username list. There is a match!
            //let's get it's line number
            passwordLine = lnr2.getLineNumber();

        }else{
            //username was not found in list, so we should keep reading.
            line2 = br2.readLine();
        }
    }
    System.out.println("passwordLine: "+passwordLine);
    br2.close();
    assert(userLine!=0);
    assert(passwordLine!=0);
    if(userLine==passwordLine){
        System.out.println("Match Found");
        matchfound = true;
    }else{
        System.out.println("Username and Password don't match");
    }
    return matchfound;
}

您没有推进
LineNumberReader
每个循环。
while
循环负责推进
BufferedReader

实际上,您可以简化事情,只使用
LineNumberReader
而不使用BufferedReaders,因为它们的readLine将像
BufferedReader
一样为您提供文本。例如:

String line = null;
int userLine=0;
LineNumberReader lnr = new LineNumberReader(new FileReader("src/BioStat/username.txt"));
while((line=lnr.readLine())!=null){
    if(line.equals(username)){
        //username is found in username list. There is a match!
        //let's get it's line number
        userLine = lnr.getLineNumber();
        break;
    }
}
lnr.close();

LineNumberReader
上对
readLine
的调用将前进到下一行(因此也将增加行号)。

您并不是在每个循环中前进
LineNumberReader
while
循环负责推进
BufferedReader

实际上,您可以简化事情,只使用
LineNumberReader
而不使用BufferedReaders,因为它们的readLine将像
BufferedReader
一样为您提供文本。例如:

String line = null;
int userLine=0;
LineNumberReader lnr = new LineNumberReader(new FileReader("src/BioStat/username.txt"));
while((line=lnr.readLine())!=null){
    if(line.equals(username)){
        //username is found in username list. There is a match!
        //let's get it's line number
        userLine = lnr.getLineNumber();
        break;
    }
}
lnr.close();

LineNumberReader
上调用
readLine
会前进到下一行(因此也会增加行号)。

也许这不是您想要的答案。。。但是如果您使用格式为“用户名:密码”的一行?使用f.readLine().split(“:”)?是的,我之前考虑过这个问题,如果这个问题真的没有解决方案,我会这么做。但我不明白为什么这不起作用。我是Java新手,所以可能有些东西我没有看到,但我的代码似乎应该可以工作。我看到您正在递增br和br2,但您没有递增lnr或lnr2。它怎么知道取什么行号?另外,您在什么时候确定您的行号读取器卡在0?我没有看到任何输出。linereader也能读取文件的内容吗?我认为最好在各自的循环中为每个迭代增加userline和password行,如果找到用户名或密码,则设置一个布尔值。总之,我认为你应该把它们放在一个文件中。也许这不是你想要的答案。。。但是如果您使用格式为“用户名:密码”的一行?使用f.readLine().split(“:”)?是的,我之前考虑过这个问题,如果这个问题真的没有解决方案,我会这么做。但我不明白为什么这不起作用。我是Java新手,所以可能有些东西我没有看到,但我的代码似乎应该可以工作。我看到您正在递增br和br2,但您没有递增lnr或lnr2。它怎么知道取什么行号?另外,您在什么时候确定您的行号读取器卡在0?我没有看到任何输出。linereader也能读取文件的内容吗?我认为最好在各自的循环中为每个迭代增加userline和password行,如果找到用户名或密码,则设置一个布尔值。总的来说,我认为你应该把它们放在一个文件中。它是有效的。谢谢不过有一个问题,我应该在while循环之后关闭lnr还是在if语句中加一个中断?它是有效的。谢谢不过有一个问题,我应该在while循环之后关闭lnr还是在if语句中加一个中断?