Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 登录顺序的逻辑_Java_File_Class - Fatal编程技术网

Java 登录顺序的逻辑

Java 登录顺序的逻辑,java,file,class,Java,File,Class,我有一个代码,打开一个文件,检查用户提供的用户名或密码是否在文件中,但代码显示成功登录,而实际上没有。我是初学者,所以我需要一些帮助来修复错误,并使用基本的初学者编码,没有复杂的库或方法 我得到以下输出,这表明我的程序没有按照我希望的方式运行: USERNAME OR PASSWORD INCORRECT! TRY AGAIN SUCCESSFUL, YOU ARE LOGGED IN! 代码如下: package login; import java.io.File; import jav

我有一个代码,打开一个文件,检查用户提供的用户名或密码是否在文件中,但代码显示成功登录,而实际上没有。我是初学者,所以我需要一些帮助来修复错误,并使用基本的初学者编码,没有复杂的库或方法

我得到以下输出,这表明我的程序没有按照我希望的方式运行:

USERNAME OR PASSWORD INCORRECT! TRY AGAIN
SUCCESSFUL, YOU ARE LOGGED IN!
代码如下:

package login;

import java.io.File;
import java.io.FileNotFoundException;

public class Main {


    public static void main(String[] args) throws FileNotFoundException {
        // TODO code application logic here.
        File file = new File("users.txt");
        Login newLogin = new Login(file);

        newLogin.checkLogin("word", "wordet");
    }

}


package login;

import java.io.File;
//library for file exception
import java.io.FileNotFoundException;
import java.util.ArrayList;
//library for opening file
import java.util.Scanner;

public class Login {

    private File file;
    private ArrayList<String> usernames;
    private ArrayList<String> passwords;
    private int tries = 3;

    public Login(File file) {
        this.file = file;
        this.usernames = new ArrayList<String>();
        this.passwords = new ArrayList<String>();
        this.tries = 3;

    }

    public void readLines() throws FileNotFoundException{

        ArrayList<String> lines = new ArrayList<String>();
        Scanner input = new Scanner(this.file);
        while (input.hasNextLine()){
            lines.add(input.nextLine());
        }
        input.close();

        usernames.clear();
        passwords.clear();
        for(int i = 0; i < lines.size(); i++) {
            if (i %2 == 0) {
                usernames.add(lines.get(i));
            } else {
                passwords.add(lines.get(i));
            }
        }
    }

    public void checkLogin(String user, String pass) throws FileNotFoundException{
        this.readLines();


       if (tries == 0){
           System.out.println("YOU HAVE TRIED TOO MANY TIMES!");
       } else {
            for(int i = 0; i < this.usernames.size(); i++) {
                if (this.usernames.contains(user)) {
                    if (passwords.get(i).equals(pass)) {
                        System.out.println("SUCCESSFUL, YOU ARE LOGGED IN!");
                    } else {
                        System.out.println("USERNAME OR PASSWORD INCORRECT! TRY AGAIN");
                        tries--;
                    }
                }
            }
       }
    }
}
包登录;
导入java.io.File;
导入java.io.FileNotFoundException;
公共班机{
公共静态void main(字符串[]args)引发FileNotFoundException{
//这里的TODO代码应用程序逻辑。
File File=新文件(“users.txt”);
Login newLogin=新登录(文件);
checkLogin(“word”、“wordet”);
}
}
软件包登录;
导入java.io.File;
//用于文件异常的库
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
//用于打开文件的库
导入java.util.Scanner;
公共类登录{
私有文件;
私有ArrayList用户名;
私有ArrayList密码;
私有int=3;
公共登录(文件){
this.file=文件;
this.usernames=new ArrayList();
this.passwords=new ArrayList();
这1.3=3;
}
public void readLines()引发FileNotFoundException{
ArrayList行=新的ArrayList();
扫描仪输入=新扫描仪(此.file);
while(input.hasNextLine()){
line.add(input.nextLine());
}
input.close();
usernames.clear();
密码。清除();
对于(int i=0;i
问题似乎就在这段代码中

           for(int i = 0; i < this.usernames.size(); i++) {
                if (this.usernames.contains(user)) {
                    if (passwords.get(i).equals(pass)) {
                        System.out.println("SUCCESSFUL, YOU ARE LOGGED IN!");
                    } else {
                        System.out.println("USERNAME OR PASSWORD INCORRECT! TRY AGAIN");
                        tries--;
                    }
                }
            }
逻辑是:

枚举所有用户。 如果当前用户名与测试用户名匹配,请检查密码。
如果提供的密码与记录相符,请登录用户。否则,登录失败。

假设您有两个
“达斯·维德”
用户,一个密码为“卢克”,另一个密码为“莱娅”。 另外,假设您只想接受密码为“Luke”,而密码为“Leia”的
“Darth Vader”
在文本文件中位于第一位

注意,对于代码,您将在
for
循环中输入
if(this.usernames.contains(user))
对于密码错误的
“Darth Vader”
,因此,由于他没有正确的密码,它将显示
“用户名或密码不正确!请重试”
(您输入else)

现在,按照相同的逻辑,在的迭代中,我们有了“Darth Vader”,使用良好的密码,您将显示
“成功,您已登录!”

这是一个解决方案:

  public void checkLogin(String user, String pass) throws FileNotFoundException{
        this.readLines();


        if (tries == 0){
            System.out.println("YOU HAVE TRIED TOO MANY TIMES!");
            return;
        }  
        int i = 0;
        for(; i < this.usernames.size(); i++) {
              if (!this.usernames.contains(user)) 
                  continue;

               if (passwords.get(i).equals(pass)) {
                   System.out.println("SUCCESSFUL, YOU ARE LOGGED IN!");
                   break;
               }            
        }
        if (i == this.usernames.size())
            System.out.println("USERNAME OR PASSWORD INCORRECT! TRY AGAIN");
  }
public void checkLogin(String user,String pass)抛出FileNotFoundException{
这是readLines();
如果(尝试==0){
System.out.println(“您尝试了太多次!”);
返回;
}  
int i=0;
对于(;i

请注意,我允许自己更改代码中的某些内容,例如删除
else
,在
if(trys==0)
之后,这会使代码看起来更干净(更易于调试)。

您遇到了什么错误。您能显示文件的内容吗?请在标题中更具描述性!
  public void checkLogin(String user, String pass) throws FileNotFoundException{
        this.readLines();


        if (tries == 0){
            System.out.println("YOU HAVE TRIED TOO MANY TIMES!");
            return;
        }  
        int i = 0;
        for(; i < this.usernames.size(); i++) {
              if (!this.usernames.contains(user)) 
                  continue;

               if (passwords.get(i).equals(pass)) {
                   System.out.println("SUCCESSFUL, YOU ARE LOGGED IN!");
                   break;
               }            
        }
        if (i == this.usernames.size())
            System.out.println("USERNAME OR PASSWORD INCORRECT! TRY AGAIN");
  }