有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java数组出现问题,无法向其添加任何内容

我有一个母类用户和一个类,该类有一系列用户作为atribute 在这个类中,我有一个方法来为ArrayList中的用户签名:

public Class UserArray extends User
public static ArrayList<User> users = new ArrayList<User>(50);

public static void signUser(User u) {
    for(User f: users) {
        if(u.name.equals(f.name)) {
            System.out.println("User already exists");
        }
        else {
            users.add(u);
            System.out.println("User signed");
        }
    }
}

我有一个controller类,应该调用这个方法,我尝试了两种方法(有静态和没有静态):

对于静态:

public Class Controller extends UserArray
public void signUseron(User u){
    UserArray.signUser(u);
    System.out.println("Usuario cadastrado com sucesso");
}

主要是这样调用这个方法:

Controller.signUser(user object);

我也尝试过不使用static,但我无法使用sign方法,也没有任何错误,但我的数组用户的大小为0,我可以添加任何内容


共 (2) 个答案

  1. # 1 楼答案

    你的代码:

    public Class UserArray extends User
    public static ArrayList<User> users = new ArrayList<User>(50);
    
    public static void signUser(User u) {
        for(User f: users) {
            if(u.name.equals(f.name)) {
                System.out.println("User already exists");
            }
            else {
                users.add(u);
                System.out.println("User signed");
            }
        }
    }
    

    让我们调试代码:

    1. 当您的方法signUser()第一次调用时,您试图迭代用户(Arraylist),它第一次是空的。因此,不会向用户添加任何内容
    2. 第二次,第三次。。这是第n次没有任何东西会添加到你的列表中

    可能的解决方案:

    public static void signUser(User u) {
          if(!users.isEmpty()){
            for(User f: users) {
                if(u.name.equals(f.name)) {
                    System.out.println("User already exists");
                }
                else {
                    users.add(u);
                    System.out.println("User signed");
                }
            }
          } else{
          users.add(u.name);
          }
         }
    
  2. # 2 楼答案

    Jeet已经指出了你代码的问题,我只是想提供另一个可能的解决方案

    可能的解决方案:

    public static void signUser(User u) {
            for(User f: users) {
                if(u.name.equals(f.name)) {
                    System.out.println("User already exists");
                    return;
                }
            }
            users.add(u);
            System.out.println("User signed");
         }