Создайте систему входа в систему Java, используя Arraylist - PullRequest
0 голосов
/ 08 апреля 2020

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

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

У меня есть класс Employee:

public class Empleado{
    private String id;
    private String passwd;

    public Empleado(String id, String passwd) {
        this.id = id;
        this.passwd = passwd;
    }

}

И вот как далеко я продвинулся по Main:

String identificador;
boolean idCheck;
String contrasena;
boolean passCheck;

ArrayList<Empleado> misEmpleados = new ArrayList<>();
misEmpleados.add(new Empleado("EmpleadoA","passA"));
misEmpleados.add(new Empleado("EmpleadoB","passB"));
misEmpleados.add(new Empleado("EmpleadoC","passC"));

do{
  System.out.print("Enter ID: ");
  identificador = input.next();

  idCheck = comprobarId(false, identificador, misEmpleados);
}while(!idCheck);

public boolean comprobarId(boolean check, String id, ArrayList<Empleado> recepcionistas){
        String contrasena;

        for (int i = 0; i < recepcionistas.size(); i++) {

            if(recepcionistas.get(i).getId().equals(id)){

                System.out.print("Introducir contraseña: ");
                contrasena = input.next();

                check = comprobarPass(id, contrasena, recepcionistas);
            }
        }
        return check;
    }


public boolean comprobarPass(String id, String pass, ArrayList<Empleado> recepcionistas){

        for (int i = 0; i < recepcionistas.size(); i++) {

            if(recepcionistas.get(i).getId().equals(pass)){
                check = true;
            }
        }
        return check;
    }

Надежда кто-то может помочь мне немного ... Я боролся с этим в течение 7 часов.

Извините, мой engli sh и любая другая ошибка, это мой первый пост / вопрос

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Вы уже получаете Empleado, соответствующий входному идентификатору, передайте только этот Empleado методу comprobarPass, а не весь список recepcionistas.

В вашем коде вы пытаетесь чтобы выполнить работу дважды, выполнив цикл в обоих методах.

Если вы делаете l oop только один раз, чтобы найти empleado, вам не нужно делать это снова, и вы можете использовать ссылку empleado.

Другая проблема с вашим кодом - это две переменные check: вы устанавливаете значение переменной check в методе comprobarPass, но эта переменная не объявлена. Кроме того, в comprobarId примитивная логическая переменная check передается как параметр, изменяется, а затем возвращается. Такое использование переменной типа примитива является плохой практикой. Предпочитаю удалить этот параметр и вернуть локальную переменную.

Правило: чем проще, тем лучше!

public boolean comprobarId(String id, ArrayList<Empleado> recepcionistas){
    String contrasena;
    boolean check = false;

    for (int i = 0; i < recepcionistas.size(); i++) {

        if(recepcionistas.get(i).getId().equals(id)){

            System.out.print("Introducir contraseña: ");
            contrasena = input.next();

            check = comprobarPass(contrasena, recepcionistas.get(i)); // pass the empleado, not the list
        }
    }
    return check;
}


public boolean comprobarPass(String pass, Empleado recepcionista){
    return recepcionista.getPasswd().equals(pass));
}
0 голосов
/ 08 апреля 2020

В вашей функции comprobarPass вы сравниваете идентификатор сотрудника с паролем, а не с паролем. Я думаю, что вы хотите изменить это

if(recepcionistas.get(i).getId().equals(pass)){
    check = true;
}

на это

Empleado e = recepcionistas.get(i);
if(e.getId().equals(id) && e.getPasswd().equals(pass)){
    check = true;
}

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

...