每次使用Observation
时,如何使用numberofObs
方法将1
数组中的单个元素增加public class Database {
private ArrayList <String> databaseOfBirds = new ArrayList<String>();
private int[] numberofObs = new int[databaseOfBirds.size()];
public void add(String name, String latinName) {
databaseOfBirds.add(name + "(" + latinName + ")");
}
public String Observation(String birdname){
for(int i = 0; i < databaseOfBirds.size(); i++) {
if(databaseOfBirds.get(i).contains(birdname)) {
numberofObs[i]++;
return "";
}
}
return "Is not a bird!";
}
}
?
我收到此错误:线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0
numpy
答案 0 :(得分:3)
当你创建numberofObs数组时,它的长度为零,因为此时databaseOfBirds为空。除非你在一些不公开的代码中增加数组,否则你第一次找到一只鸟时会得到一个NullPointerException。
您可以通过将numberofObs设为List:
来解决此问题private List<Integer> numberofObs = new ArrayList<>();
然后在你的添加方法中添加以下行:
numberofObs.add(0);
最后,改变
numberofObs[i]++;
到
numberofObs.set(i, 1 + numberofObs.get(i));
答案 1 :(得分:2)
在两个地方实施错误:
我理解你想为观察所匹配的每只鸟设一个单独的计数器。在这里(在数据结构方面有几种方法,最容易理解):
public class Database {
private List<String> databaseOfBirds = new ArrayList<>();
private List<Integer> numberofObs = new ArrayLidt<>();
public void add(String name, String latinName) {
databaseOfBirds.add(name + "(" + latinName + ")");
numberofObs.add(0);
}
public String Observation(String birdname){
for(int i = 0; i < databaseOfBirds.size(); i++) {
if (databaseOfBirds.get(i).contains(birdname)) {
numberofObs.set(i, numberofObs.get(i)+1);
System.out.println(numberofObs.get(i));
return "";
}
}
return "Is not a bird!";
}
}
答案 2 :(得分:0)
我建议使用地图而不是2个列表。
private Map<String, Long> birds = new HashMap<>();
易于管理。除非记忆力不足,否则你可能不想使用int[]
。