Как исправить только последнюю строку проверяемого массива на имя пользователя и пароль при чтении из файла - PullRequest
0 голосов
/ 10 апреля 2019

Я читаю имена пользователей из CSV-файла в формате

admin1, apple,  admin
staff1, orange, staff

, когда staff1 находится на новой строке, и независимо от того, сколько у меня строк, при входе в систему будет проверяться только последняя строка.

        AtomicBoolean found = new AtomicBoolean(false);

   btnLogin.setOnAction(e -> {
        while (in.hasNextLine()) {


            String s = in.nextLine().replaceAll("\\s+", "");





                if (name.equals(sArray[0]) && password.equals(sArray[1])) {
                    lMessage.setText("correct");
                    openMainForm();


                } else if (name.equals("") || password.equals("")) {
                    lMessage.setText("Please enter a username and password");


                } else {
                    lMessage.setText("Please enter valid credentials");



                }




            }


        });

Я ожидаю, что если в файле будет найдена комбинация имени пользователя и пароля, они смогут войти в систему, а не только, если имя пользователя и пароль будут последними за все время

1 Ответ

1 голос
/ 10 апреля 2019

Проблема в том, что вы устанавливаете действие в цикле. То есть один объект действия создается для каждой пары, а затем присваивается. Таким образом, после последней итерации действие будет установлено на последний объект, который, очевидно, проверяет последнюю пару имя пользователя-пароль.

цикл переводит что-то вроде,

setOnAction (actionobject1, который проверяет admin1, apple, admin)

setOnAction (actionobject2, который проверяет персонал1, оранжевый, персонал)

Эффективно сохраняет последний созданный объект и проверяет только последнюю пару

Возможно, вы захотите изменить свою логику так, чтобы существовал только один объект действия. А затем проверьте правильность пары имя пользователя и пароль.

Примерно так:

btnLogin.setOnAction(e -> {

     while (in.hasNextLine() ) {
        // check condition here
        // don't forget to break when successful

      }
        in.close();
    });

Кроме того, убедитесь, что вы разорвали петлю, как только удачная пара найдена В противном случае произойдет то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...