首页 > 解决方案 > 制作可以具有可变数量元素的对象数组

问题描述

我正在尝试创建一个类来处理我的编程学校项目的用户数据库。这将使用数组而不是数组列表,它是分配的核心参数。

public class UserDB {
    User[] UserAry;

    public UserDB(){
        UserAry = new User[0];
    }

    //admin
    public void addUser(String id, String pw, char type){
        User[] NewUserAry = new User[UserAry.length+1];
        for (int i=0; i<UserAry.length;i++){
            NewUserAry[i] = UserAry[i];
        }
        NewUserAry[NewUserAry.length-1] = new User(id,pw,type);
        UserAry = NewUserAry;
    }



}

这是代码。我担心如果我要在另一个类中调用它,那么数组将始终为 0(当我调用 UserDB 时)或 1(当我添加新用户时,它会在前一个零上加一),在 arraysize 之前因为它被初始化为 0,所以再次变为零。

标签: javaarraysobject

解决方案


我认为您的代码没有任何问题。只是为了使它更清洁,我已将您的for循环替换为System.arraycopy. 除此之外,我还按照命名约定替换了变量名。下面给出的是工作代码:

public class User {
    String id,pw;
    char type;
    public User(String id, String pw, char type) {
        super();
        this.id = id;
        this.pw = pw;
        this.type = type;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", pw=" + pw + ", type=" + type + "]";
    }
}

public class UserDB {
    User[] userAry;

    public UserDB() {
        userAry = new User[0];
    }

    public void addUser(String id, String pw, char type) {
        User[] newUserAry = new User[userAry.length + 1];
        System.arraycopy(userAry, 0, newUserAry, 0, userAry.length);
        newUserAry[newUserAry.length - 1] = new User(id, pw, type);
        userAry = newUserAry;
    }
    public void printList() {
        for (User user:userAry)
            System.out.println(user);
    }
}

public class TestUserDB {
    public static void main(String[] args) {
        UserDB db=new UserDB();
        db.addUser("a1", "a", 'a');
        db.addUser("a2", "b", 'b');
        db.addUser("a3", "c", 'a');
        db.addUser("a4", "d", 'b');

        db.printList();
    }
}

输出:

User [id=a1, pw=a, type=a]
User [id=a2, pw=b, type=b]
User [id=a3, pw=c, type=a]
User [id=a4, pw=d, type=b]

推荐阅读