【问题标题】:making a array of objects that can have variable amount of elements [closed]制作可以具有可变数量元素的对象数组[关闭]
【发布时间】:2019-11-10 09:24:19
【问题描述】:

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

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,再次变为0。

【问题讨论】:

  • 这看起来像工作代码。你能更具体地谈谈你的问题吗?也许您对 Java 在某些方面的工作方式存在误解?
  • 那么,你在为什么呢?
  • "之前arraysize又变为零了,因为它被初始化为0" 为什么会变为零?为什么会初始化为0?这只发生在您创建UserDB 的新实例时,因此不要创建新实例,继续使用您创建的第一个实例。当然,这一切都发生在您未显示的代码中,因此我们对此无能为力。
  • 我还没有开始制作我没有实际显示的代码。我仍在努力制作在实际主代码期间使用的类。我想我可能误解了代码/Java 的工作原理,所以我很恐慌

标签: java arrays object


【解决方案1】:

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

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]

【讨论】:

  • 并且还用小写名称重命名了 userAry
  • 不,一切都很好我只是说你不仅将for循环更改为arraycopy,而且还重命名了userAry,它应该以情人案例开头
猜你喜欢
  • 2016-12-04
  • 2013-08-26
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多