Java 读取和比较文本文件中的字符串,变量未初始化

Java 读取和比较文本文件中的字符串,变量未初始化,java,file-io,Java,File Io,我发现了错误 本地变量名称和密码可能尚未初始化 对于if语句。如果我将括号中的第二个字符串更改为引号中的某个内容,或者如果我将变量设置为0,那么这些错误就会消失,但是我还需要将它们更改为int,并且需要它们为string 我试图将文本文件中的用户名和密码与新输入的用户名和密码进行比较。该程序也应该在3次错误尝试后退出,所以我可能会将System.out.println(“再见!”)放在这里也在错误的位置 public static void main(String[] args) {

我发现了错误

本地变量名称和密码可能尚未初始化

对于if语句。如果我将括号中的第二个字符串更改为引号中的某个内容,或者如果我将变量设置为0,那么这些错误就会消失,但是我还需要将它们更改为
int
,并且需要它们为
string

我试图将文本文件中的用户名和密码与新输入的用户名和密码进行比较。该程序也应该在3次错误尝试后退出,所以我可能会将
System.out.println(“再见!”)放在这里也在错误的位置

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

    }

}
publicstaticvoidmain(字符串[]args){
int numberofthresents=1;
字符串fileName=“logins.txt”;
扫描仪输入流=空;
字符串名称、密码、行、第二个名称;
字符串密码;
做
{
System.out.println(“请输入您的用户名:”);
扫描仪键盘=新扫描仪(System.in);
secondname=keyboard.nextLine();
System.out.println(“请输入您的密码:”);
secondpassword=keyboard.nextLine();
尝试
{
inputStream=新扫描仪(新文件(文件名));
}
catch(filenotfounde异常)
{
System.out.println(“打开文件时出错”+
文件名);
系统出口(0);
}
while(inputStream.hasNextLine())
{
line=inputStream.nextLine();
}
if((name.equalsIgnoreCase(secondname))&&
(password.equalsIgnoreCase(secondpassword)))
{System.out.println(“欢迎!”);
尝试次数=4次;
}
其他的
System.out.println(“无效。请重试”);
尝试次数++;
}

在JAVA方法中,(numberOfAttempts任何局部变量都必须先初始化才能使用。在您尝试比较代码中的名称和密码时,您的代码从未初始化或分配值。最好将字符串初始化为NULL或空字符串,如“”或任何所需的值。

您从未初始化
名称
密码
,因此您当然会遇到此错误


您初始化了
secondname
secondpassword
,但您的条件检查了未初始化的
name
password

您遇到了一系列问题

这些错误是由于您从未为变量“name”和“password”赋值造成的,但您需要检查这些变量是否与您读取的secondname和secondpassword变量匹配。由于name和password根本无法获取任何值,因此比较不可能是您想要的,因此编译器会将其标记为错误

您可以通过在声明某些值时为其分配名称和密码来消除错误,但您的程序仍然无法正常工作,因为无论您分配什么值,它可能都不是您程序的用户想要比较的对象

大概您的意图是从您打开并读入的输入文件中读取name和password的值,但事实上,您没有对该文件中的值执行任何操作,只是立即将它们扔掉

while(inputStream.hasNextLine()) {
    line = inputStream.nextLine();
}
此循环将读取文件中的每一行,但只要您读取一行,您就会扔掉读取到line变量中的任何内容,因为您必须重新使用该变量来读取下一行,您也会立即扔掉该行。在循环结束时,您会将文件中的最后一行保存到
,但是程序的其余部分也不使用
变量


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

将字符串设置为“”然后连接数据?当if语句试图比较您的name或password变量时,它甚至没有为这些变量分配值来比较任何内容。name和password的值应该是什么?您必须为它们分配一些内容。谢谢!这解决了我的错误问题。但是正如用户deong所提到的,我无法比较字符串,因为从txt文件读取的所有内容都被扔掉了。你知道如何修复吗?我的java书非常没有帮助。如果某个解决方案对你有帮助,那么你可以升级并接受它,并向其他用户确认这是一个有效的解决方案。非常感谢你的帮助。我理解它为什么不起作用现在,我不知道如何修复它。我的java书没有讨论这个问题。你能帮忙吗?非常感谢。