Отклонить дублирующуюся запись атрибута массива объектов в Java swing

#java #netbeans

#java #netbeans

Вопрос:

Я пытаюсь создать программу для регистрации пользователей, поэтому я создал массив пользователей с атрибутами: Usuario (Идентификатор пользователя), nombre (имя) и contraseña (пароль), и каждый раз, когда я создаю нового пользователя, программа должна убедиться, что идентификатор пользователя ранее не регистрировался, если он уже зарегистрирован, программа должна отклонять регистрацию пользователя, пока я не введу другой идентификатор пользователя, каждый созданный объект (каждый пользователь с его атрибутами) сохраняется в соответствующей позиции массива, поэтому я создаю новый идентификатор пользователя. метод с этими функциями (int contador будет подсчитывать время, когда я регистрирую пользователя, в массиве максимум 10, поэтому contador <10):

 public  void registrarUsuario(int contador){
         int f = contador;
        usuario = t3.getText();
        nombre = t4.getText();
        contraseña = t5.getText();

            for(int i=0; i<users.length; i  ){
line 43 with error if(users[i].getUsuario() == usuario){
                    JOptionPane.showMessageDialog(null, "El nombre de usuario ya ha sido utilizado");

                }
            }



                
        if(this.t6.getText().equals(this.t5.getText())){  
           Usuario user = new Usuario(usuario, nombre, contraseña);
           users[contador] = user;
            
        JOptionPane.showMessageDialog(null, "El usuario se ha registrado con exito!");   
        
            this.t3.setText("");
            this.t4.setText("");
            this.t5.setText("");
            this.t6.setText("");
            
        }else{
            
        JOptionPane.showMessageDialog(null, "ERROR: las contraseñas no coididen");
            this.t5.setText("");
            this.t6.setText("");
            
        }
      
    }
  

но когда я запускаю программу, я получаю эту ошибку:

 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at proyecto1.Proyecto1.registrarUsuario(Proyecto1.java:143) 
  

(см. выше до строки 143)

Ответ №1:

Я понял, чего вы пытаетесь достичь, но я не до конца понял ваш метод, потому что вы не отправили все классы, поэтому я отправлю вам, как я решил это, и если вы хотите, вы можете повторно отправить нам все свои классы и код, чтобы иметь полное представление 🙂

Мой код: (конечно, вы можете отредактировать его, чтобы он был интерактивным с пользователем, здесь я показываю только общую идею)

     //User class
package userArray;

public class User {
    
    private int id;
    private String name;
    private String password;//there is special classes for password in java, not going to use them in this problem

public User(int id, String name, String password) {
        super();
        this.id = id;
        this.name = name;
        this.password = password;
    }
//getters and setters   toString()

//UsersList class

package userArray;

import java.util.*;

public class UsersList {
    
    ArrayList<User> users = new ArrayList<User>();
    
    //The original function
    public User createUser(int id, String name, String password) throws Exception {
        for(User u : this.users) {
            if(id == u.getId())
                throw new Exception("User already exists...");
        }
        User u = new User(id,name,password);
        this.users.add(u);
        return u;
    }
    
    //The function used to wrap the original function in try/catch each time executed
    public User registerUser(int id, String name, String password) {
           try {
              return createUser(id,name,password);
           } catch (Exception e) {
              System.out.println("ID "  id  " for user " name " is for an existing user...");
              return null;
           }
        }

    public UsersList() {
        super();
        this.users = users;
    }
//   toString()

//Main class

package userArray;

public class Main {

    public static void main(String[] args) {
        
        UsersList list = new UsersList();
        
        list.registerUser(1, "Kevin", "Kevin123");
        list.registerUser(2, "Sarah", "Sarah123");
        list.registerUser(1, "Steven", "Steven123");
        list.registerUser(3, "Stephany", "Stephany123");
        list.registerUser(3, "Alex", "Alex123");
        
        System.out.println("The list is: ");
        System.out.println(list.toString());

    }

}
  

Результат выполнения:

Идентификатор 1 для пользователя Steven соответствует существующему пользователю…
Идентификатор 3 для пользователя Alex предназначен для существующего пользователя…
Список таков:
Список пользователей [users=[User [id=1, name=Kevin, password=Kevin123], User [id=2, name= Sarah, password=Sarah123], User [id=3, name= Stephany, password=Stephany123]]]

Ответ №2:

В этой строке кода:

 for(int i=0; i<users.length; i  ){
  

Вы никогда не определяли массив users — либо потому, что забыли идентификатор this, либо просто забыли его определить.