我有以下对象:
public class Person {
private String id;
private Score[] scores;
public Person() {
}
//getters and setters etc
}
我想创建一个方法,将另一个对象添加到分数array
中。
我打算这样做,如下所示:
public void addScore(Score score){
scores[0] = score;
}
这是最好的方法吗?
答案 0 :(得分:4)
创建一个setter方法是个好主意。但不知何故,您必须跟踪列表中添加的分数。通过始终将您的设置值分配给数组索引0,您最终会反复替换第一个值。
我建议您使用一些List分数 - 然后您可以将添加委托给列表:
protected List<Score> scores = new ArrayList<Score>();
public void addScore(Score score) {
scores.add(score)
}
如果需要坚持使用数组,则必须保留上一个插入位置的一个附加值,例如
protected int lastItem = 0;
protected Score[] scores = new Score[100]; //any initial size
public void addScore(Score score) {
scores[lastItem++] = score;
//check if you need to make the array larger
//maybe copying elements with System.arraycopy()
}
答案 1 :(得分:0)
要么存储数组的当前索引,你要这样做:
private String id;
private Score[] scores;
private int index;
public Person()){
index = 0;
scores = new Score[10];
}
public void addScore(Score score){
if(index<scores.length){
scores[index] = score;
index++;
}else{
Score[] temp = new Score[index+10];
for(int i=0;i<scores.length;i++){
temp[i] = scores[i];
}
scores = temp;
scores[index] = score;
index++;
}
}
或者正如某人已经说过的那样,你使用的是一个列表,基本上是一个ADT,根据你使用的列表做类似的事情。
答案 2 :(得分:0)
如果您仍想使用它,则需要关注数组大小。首先,当空间不足以放置您的值时,您需要应用数组大小。其次,您需要将原始元素复制到新数组。
所以,使用数组的方式不是最好的方法。正如有人已经说过的,最好的方法是使用java类的列表。列表的大小可以动态增长,您不需要关心空间。