Ошибка в сопоставлении значений на втором третьем месте списка массивов в моей функции входа в систему? - PullRequest
0 голосов
/ 28 октября 2019

У меня есть домашнее задание, в котором я должен сделать регистрационную форму в журнале, используя joptionpane, и получать входные данные только с помощью arrayList, это основная задача, но я застрял здесь: «Я сделал функцию для сопоставления значений в массиве-list, но он отображает неправильный вывод ".

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

public class register {
    ArrayList regUser;

    register()
    {
        this.regUser=new ArrayList();
    }

     public void regUser(){
            String regName = JOptionPane.showInputDialog(null, "Enter User Name:");
            String regPass = JOptionPane.showInputDialog(null, "Enter User Password:");

            userData p = new userData(regName,regPass);

            regUser.add(p);
        }
public void login()
    {
        String name = JOptionPane.showInputDialog(null, "Enter User Name:");
        String password = JOptionPane.showInputDialog(null, "Enter User Password:");

        for(int i=0; i<regUser.size(); i++)
        {
            userData k = (userData)regUser.get(i);
            if(name.equals(k.name) && password.equals(k.password)){
                JOptionPane.showMessageDialog(null, "Welcome to Rent A Car\n All cars data here....");

            }
            JOptionPane.showMessageDialog(null, "Wrong login info please try again");

        }

Я принимаю, чтоМой метод входа в систему проверяет каждое целое в arraylist на предмет входного значения имени пользователя для входа в систему, и, если нет полного совпадения, отображается сообщение об ошибке. Но мои программы прекрасно работают для первых значений массива, но не работают для следующих значений.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Проблема, помимо плохого качества вашего кода, заключается в следующем:

у вас есть имя, скажем "name1", и пароль "pass1"
, и вы проверяете, равно ли оно каждомузарегистрированных пользователей.
вы, вероятно, захотите использовать метод contains () интерфейса List
, поэтому, если имя пользователя и пароль находятся в списке, напишите сообщение об успешном завершении, иначе произойдет сбой.

0 голосов
/ 28 октября 2019
class UserData {
  private final String username;
  private final String password;

  UserData(String username, String password) {
    this.username = username;
    this.password = password;
  }

  public String getUsername() {
    return username;
  }

  public String getPassword() {
    return password;
  }
}

class Registration {
  private final List<UserData> userData = new ArrayList<>();

  public void regUser() {
    String regName = JOptionPane.showInputDialog(null, "Enter User Name:");
    String regPass = JOptionPane.showInputDialog(null, "Enter User Password:");
    userData.add(new UserData(regName, regPass));
  }

  public void login() {
    String name = JOptionPane.showInputDialog(null, "Enter User Name:");
    String password = JOptionPane.showInputDialog(null, "Enter User Password:");

    boolean isValidUser = userData.stream()
        .anyMatch(user -> user.getUsername().equals(name) && user.getPassword().equals(password));

    if (isValidUser) {
      JOptionPane.showMessageDialog(null, "Welcome to Rent A Car\n All cars data here....");
    } else {
      JOptionPane.showMessageDialog(null, "Wrong login info please try again");
    }
  }
}
...