2

我收到错误

局部变量名称和密码可能尚未初始化,

对于 if 语句。如果我将括号中的第二个字符串更改为引号中的内容,或者如果我将变量设置为 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

你永远不会初始化nameand password,所以你当然会得到这个错误。

您初始化secondnameand secondpassword,但您的条件检查nameandpassword未初始化。

于 2013-05-14T01:20:44.863 回答
0

你有一堆问题。

这些错误是由于您从未为变量“name”和“password”分配任何值而导致的,但是您随后检查这些变量是否与您读取的 secondname 和 secondpassword 变量匹配。因为 name 和 password 从来没有得到任何值,所以比较不可能是你想要的,所以编译器将它标记为错误。

您可以通过在声明它们时将名称和密码分配给某些值来消除错误,但是您的程序仍然无法正常工作,因为无论您分配什么值,它都可能不是您的程序的用户希望与之进行比较。

大概您的意图是从您打开并读入的输入文件中读取名称和密码的值,但实际上您并没有对该文件中的值做任何事情,除非立即将它们扔掉。看看循环

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

此循环将从文件中读取每一行,但是一旦您读取了一行,您就会丢弃读取到 line 变量中的任何内容,因为您必须重用该变量来读取下一行,您也会丢弃立即地。在循环结束时,您会将文件的最后一行保存到line中,但程序的其余部分也不使用该line变量。

您需要在该循环中放入一些逻辑来读取您想从文件中读取的任何内容,将其存储在名称和密码变量中,然后您会有一些希望,当您执行 equalsIgnoreCase 的东西时,您实际上是比较对您的程序有一定意义的变量。

于 2013-05-14T01:27:07.233 回答
0

在 JAVA 方法中,任何局部变量都必须先初始化才能使用。在您的情况下,您尝试比较代码中的名称和密码永远不会初始化或分配值。将字符串初始化为 NULL 或空字符串(例如“”)或任何所需的值将是一个好主意。

于 2013-05-14T01:19:23.843 回答