有这个:
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];
任何人都可以帮我纠正这段代码吗? - 或者找出我在这里缺少的东西?
答案 0 :(得分:5)
Java最佳实践表明,您的类名应该以大写字母开头,而您的变量/字段名称应该是小写的。在这种情况下,我相信你的代码无法编译,因为你有一个名为'girl'的类和一个同名的变量。
将您的班级改为大写字母:
static class Girl{ ...}
从那里开始。错误消息也很容易理解。
答案 1 :(得分:0)
从评论中:你需要一张你想要达到的地图:
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");
}
当您想要访问地图的元素时:
Girl found = girls.get(id); //id is an Integer
迭代Girl实例:哇,我刚刚写了我写的内容???我有一个妻子!
for(Girl girl: girls.values()) {
System.out.println(girl.name); //here you can do anything to the Girl, what morality permits...
}
此外,您可以使用.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...
}
然而的行为是,当结果集中有更多具有相同id的女孩时(无论如何都不可能),它会覆盖所述女孩的属性,使其不具有确定性...... < / p>