2

エラーが発生します

ローカル変数名とパスワードが初期化されていない可能性があります。

if ステートメントの場合。これらのエラーは、括弧内の 2 番目の文字列を引用符で囲んだものに変更したり、変数を 0 に設定したりすると消えますが、それらを に変更する必要がintあり、String.

テキスト ファイルのユーザー名とパスワードを、新しく入力したユーザー名とパスワードと比較しようとしています。プログラムは 3 回失敗した後も終了するはずなのでSystem.out.println("Goodbye!");、間違った場所に配置した可能性もあります。

public static void main(String[] args) {

        int numberOfAttempts = 1;
        String fileName = "logins.txt";
        Scanner inputStream = null;
        String name, password, line, secondname;
        String secondpassword;


        do
        {
            System.out.println("Please enter your username: ");
            Scanner keyboard = new Scanner(System.in);
            secondname = keyboard.nextLine();
            System.out.println("Please enter your password: ");
            secondpassword = keyboard.nextLine();
            try
            {
                inputStream = new Scanner(new File(fileName));
            }
            catch(FileNotFoundException e)
            {
                System.out.println("Error opening the file " + 
                        fileName);
                System.exit(0);
            }
            while (inputStream.hasNextLine())
               {
                   line = inputStream.nextLine();
               }
            if ((name.equalsIgnoreCase(secondname))&&
                    (password.equalsIgnoreCase(secondpassword)))
            {System.out.println("Welcome!");
            numberOfAttempts = 4;
            }

            else
                System.out.println("Invalid. Please try again.");
            numberOfAttempts++;

        }

        while ( numberOfAttempts <4);
        System.out.println("Goodbye!");


        inputStream.close();

    }

}
4

3 に答える 3

1

nameとを初期化することはないpasswordため、もちろんこのエラーが発生します。

と を初期化secondnameしますが、条件は初期化されていないとをsecondpasswordチェックします。namepassword

于 2013-05-14T01:20:44.863 に答える
0

JAVA メソッドでは、すべてのローカル変数を使用する前に初期化する必要があります。あなたのケースでは、コード内の名前とパスワードを比較しようとしていますが、初期化されたり、値が割り当てられたりすることはありません。文字列を NULL または "" などの空の文字列、または任意の値として初期化することをお勧めします。

于 2013-05-14T01:19:23.843 に答える
0

あなたにはたくさんの問題があります。

エラーは、変数「name」と「password」に値を割り当てないという事実によって引き起こされますが、それらの変数が、読み取った secondname および secondpassword 変数と一致するかどうかを確認します。name と password はまったく値を取得しないため、意図したとおりに比較できない可能性があるため、コンパイラはエラーとしてフラグを立てます。

宣言時に名前とパスワードをいくつかの値に割り当てることでエラーをなくすことができますが、プログラムはまだ正しく動作しません。あなたのプログラムのユーザーは、比較したいと思うでしょう。

おそらくあなたの意図は、開いて読み込んだ入力ファイルから name と password の値を読み取ることですが、実際には、そのファイルの値をすぐに破棄する以外は何もしていません。ループを見てください

while(inputStream.hasNextLine()) {
    line = inputStream.nextLine();
}

このループはファイルからすべての行を読み取りますが、1 行を読み取るとすぐに、次の行を読み取るためにその変数を再利用する必要があるため、line 変数に読み取ったものをすべて破棄します。これも破棄します。すぐに。ループの最後で、ファイルの最後の行を に保存しますが、プログラムの残りの部分も変数lineを使用しません。line

そのループ内にロジックを入れて、ファイルから読みたいものをすべて読み取り、それを名前変数とパスワード変数に格納する必要があります。そうすれば、equalsIgnoreCase を実行したときに実際にプログラムにとって何らかの意味を持つ変数を比較します。

于 2013-05-14T01:27:07.233 に答える