如何在Java中创建对象数组列表
具有以下特征:如何在Java中创建对象数组列表,java,arrays,list,class,object,Java,Arrays,List,Class,Object,具有以下特征: static class Girl{ public String age; public String name; public String id; } static Girl[] girl; 那么我无法在我的主要功能中执行此操作: ResultSet r = s.executeQuery("select count(*) from children"); r.next(); girl_count=r.getInt(1); girl = new
static class Girl{
public String age;
public String name;
public String id;
}
static Girl[] girl;
那么我无法在我的主要功能中执行此操作:
ResultSet r = s.executeQuery("select count(*) from children");
r.next();
girl_count=r.getInt(1);
girl = new Girl[girl_count];
r = s.executeQuery("select * from children");
int i = 0;
while(r.next()){
i = r.getString("id");
if(girl[i]==null)girl[i]=new Girl();
girl[i].age=r.getString("age");
girl[i].name=r.getString("name");
girl[i].id=r.getString("id");
}
上面的代码不起作用,我想知道的是:
System.out.println(girl[3]);
尤其是这一行:
girl = new Girl[girl_count];
有人能帮我更正这个代码吗或者找出我在这里遗漏了什么?Java最佳实践表明,类名应该以大写字母开头,变量/字段名应该以小写字母开头。我相信,在这种情况下,您的代码无法编译,因为您有一个名为'girl'的类和一个同名的varaiable 将类更改为大写字母:
static class Girl{ ...}
从那里开始。错误消息的理解也会简单得多。来自评论:您需要一个地图来描述您想要实现的目标:
Map<Integer, Girl> girls = new HashMap<Integer, Girl>();
while(r.next()){
int i = r.getInt("id"); // note the getInt()
Girl g = girls.get(i); //attempt to get girl from map by ID, returns null if not found
if(g==null) { // check if null
g=new Girl(); // create
girls.put(i,g); //put into map
}
g.age=r.getString("age");
g.name=r.getString("name");
g.id=r.getString("id");
}
重复女孩的例子:哇,我写的是我写的吗???我有一个妻子
此外,您还可以使用.keySet()
方法对键进行迭代
或者,如果您也需要ID:
for(Map.Entry<Integer,Girl> entry: girls.entrySet()) {
Integer id = entry.getKey();
Girl girl = entry.getValue();
System.out.println(girl.name); //here you can do anything to the Girl, what morality permits...
}
for(Map.Entry:girls.entrySet()){
整数id=entry.getKey();
Girl=entry.getValue();
System.out.println(girl.name);//在这里,只要道德允许,你可以对这个女孩做任何事情。。。
}
然而当结果集中有更多女孩具有相同id时(无论如何都不可能),它会覆盖所述女孩的属性,使其不具有确定性…您预期会发生什么以及会发生什么?假设id从0到
女孩计数-1
,这段代码很好(忽略输入错误和明显的编译错误)。但是,当您以这种方式打印一个girl对象时,您将获得默认的toString
实现(很可能是随机输出)。看一看,类和变量不应该使用完全相同的名称。(如果你使用了正确的命名约定,这是不可能的。)这行不行<代码>int i=r.getString(“id”)代码>请阅读我从rolfl的回答中收到的命令我计划做的是创建大量的class girl对象,并通过girl[id]。name或girl[id]。age有一个预定义的id列表,但如果没有girl=new girl[girl_count],我似乎无法做到这一点
这限制了我,因为ID没有排序,它可以是54,2,13,1,99等等。@punked开始做建议的更改,然后评论如果这不能解决你的问题OK,所以我做了代码更改,大写字母确实有所帮助,但现在我得到java.lang.ArrayIndexOutOfBoundsException
如果(girl[i]==null)girl[i]=新来的女孩()代码>您的代码中仍然存在一些编译错误,@ppeterka上面提到的行已断开,这将永远无法编译:int i=r.getString(“id”)
。修复你的代码,然后还要相信数据库中每个女孩的ID值必须小于女孩的长度。这听起来很有希望,我现在就试试这正是我想要的!非常感谢(佩特卡66:))还有一件事,我现在如何迭代它?像(女孩:女孩){}?@punked我在地图上添加了一些关于迭代的细节。谢谢你,这真的很有帮助!
for(Girl girl: girls.values()) {
System.out.println(girl.name); //here you can do anything to the Girl, what morality permits...
}
for(Map.Entry<Integer,Girl> entry: girls.entrySet()) {
Integer id = entry.getKey();
Girl girl = entry.getValue();
System.out.println(girl.name); //here you can do anything to the Girl, what morality permits...
}