如何避免java文本文件中的重复输出?

时间:2015-10-30 15:44:45

标签: java file-io text-files

我有一个简单的问题。

我已经在java中使用文本文件创建了一个简单的登录系统。

我的文本文件包含以下记录:

Hamada 114455
Ahmed  236974145
Johny  4123745

这些记录的编程格式如下:

String username, int password

问题出在登录操作时,系统应该像这样工作:

username: Ahmed
password: 114455

系统应在文本文件中搜索用户名和密码,如果存在,则显示“欢迎:)”。

如果没有,则说“用户名或密码错误”

问题:如果我输入了错误的用户名或密码,那么它会为每个未找到用户名和密码的行写入错误的用户名或密码。

这是我的代码:

                System.out.println("Login Page");
                System.out.printf("Username: ");
                String user2 = input.next();
                System.out.printf("Password: ");
                int pass2 = input.nextInt();
                Scanner y = null;
                try{
                y = new Scanner(new File("C:\\Users\\فاطمة\\Downloads\\accounts.txt"));
                while(y.hasNext())
                {
                String a = y.next();
                int b = y.nextInt();
                if((a == null ? user2 == null : a.equals(user2)) && b == pass2)
                    System.out.println("Welcome :)");
                else
                    System.out.println("Wrong username or password .. try again !!");
                }
                }
                catch(Exception e)
                {
                }

3 个答案:

答案 0 :(得分:1)

while循环中,使用boolean变量(初始化为false)。 如果找到具有相同数据的条目,请将其设置为true

然后在while循环之外打印结果。

boolean userExists = false;
while (y.hasNext()) {
  // .....
  if((a == null ? user2 == null : a.equals(user2)) && b == pass2)
    userExists = true;

  // ...
}

if (userExists)
  System.out.println("Welcome");
else
  System.out.println("Wrong username or password .. try again !!");

答案 1 :(得分:1)

 boolean bool = false;
Scanner y = null;
try{
y = new Scanner(new File("Path"));
while(y.hasNext())
{
String a = y.next();
int b = y.nextInt();
if((a == null ? user2 == null : a.equals(user2)) && b == pass2)
    bool = true;
}
if(bool) 
    System.out.println("Welcome :)");
else 
    System.out.println("Wrong username or password .. try again !!");
}

在您的情况下,您正在检查文本文件中每个条目的if else条件。您还可以在控制台上显示每个条目的消息。退出循环后,我修改了程序并写入控制台。

答案 2 :(得分:1)

以这种方式修改您的代码:

boolean isWrong = true ;
while(y.hasNext())
{
    String a = y.next();
    int b = y.nextInt();
    if((a == null ? user2 == null : a.equals(user2)) && b == pass2)
        isWrong = false ;
}
if(isWrong) 
    System.out.println("Wrong username or password .. try again !!");
else
    System.out.println("Welcome :)");