如何更新数组中的元素?

时间:2017-07-28 22:55:11

标签: java arrays

每次使用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

3 个答案:

答案 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)

在两个地方实施错误:

  1. numberOfObs赋值将触发ArrayIndexOutOfBoundsException,因为每次将新鸟添加到数据库时都不会调整它的大小
  2. 你没有在匹配的鸟类计数器上增加任何东西
  3. 我理解你想为观察所匹配的每只鸟设一个单独的计数器。在这里(在数据结构方面有几种方法,最容易理解):

    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[]