java - 制作可以具有可变数量元素的对象数组
问题描述
我正在尝试创建一个类来处理我的编程学校项目的用户数据库。这将使用数组而不是数组列表,它是分配的核心参数。
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,所以再次变为零。
解决方案
我认为您的代码没有任何问题。只是为了使它更清洁,我已将您的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]
推荐阅读
- android - 第一次更新后未触发 Firebase 数据库 onChildChanged()
- django - Django 与 BeautifulSoup 的 lxml 解析器的兼容性
- javascript - 如何使用codemirror显示像mozilla开发网络一样的代码输出?
- css - CSS @keyframes 动画在悬停时不断闪烁
- encryption - 如何使用 Virgil 安全加密和解密消息?
- google-app-engine - 谷歌应用引擎项目多区域部署
- angular - 我们如何在 Angular 4 应用程序中为特定的 html 页面导入条件 css 文件?
- android - 更改系统语言时,Android 复数无法正常工作
- scala - 如何在 Play 自己的代码中使用 Status
- javascript - javascript中的mouseChildren之类的东西