1

2 つの異なるテキスト ファイルを読み取るために、次のコードを作成しました。一方のテキスト ファイルは「ユーザー名」テキスト ファイルと呼ばれ、もう一方は「パスワード」テキスト ファイルと呼ばれます。ログインプログラムを作成しています。ユーザーが正常にログインするには、ユーザー名の行番号がパスワードの行番号と一致する必要があります。ただし、何らかの理由で、両方のファイルの 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;
}
4

1 に答える 1

1

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

readLineonの呼び出しLineNumberReaderは次の行に進みます (したがって、行番号も増加します)。

于 2013-01-20T02:02:18.817 に答える