在Java swing中拒绝对象数组的重复属性条目

问题描述

我尝试制作一个程序来注册用户,因此我创建了一个具有以下属性用户数组:Usuario用户ID),nombre名称)和contraseña(密码) ),并且每次创建新用户时,程序都必须确保之前未注册用户ID,如果已经注册过该程序,则该程序必须拒绝用户注册,直到我输入不同的UserID为止,每个创建的对象(每个拥有该用户用户属性)保存在数组的相应位置,因此我用这些函数创建了一个方法(int contador会计算我注册一个User的次数,该数组最多为10个,所以contador

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行)

解决方法

在这一行代码上:

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

您从未定义数组用户-是因为您忘记了标识符,或者只是忘记了对其进行定义。

,

我得到了您想要达到的目标,但是我没有完全理解您的方法,因为您没有发送所有的类,所以我将向您发送我如何解决它的方法,如果您希望您可以重新发送我们您的课程和代码具有完整的外观:)

我的代码:(当然,您可以对其进行编辑以使其与用户交互,在这里我仅显示一般思想)

    //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 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 password) {
           try {
              return createUser(id,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());

    }

}

执行结果:

史蒂文用户的ID 1适用于现有用户...
用户Alex的ID 3适用于现有用户...
列表是:
UsersList [用户= [用户[id = 1,名称= Kevin,密码= Kevin123],用户[id = 2,名称= Sarah,密码= Sarah123],用户[id = 3,名称= Stephany,密码= Stephany123]] ]