我无法弄清楚为什么我在运行io时遇到java.lang.Nullpointerexception错误消息

时间:2014-11-05 20:59:40

标签: java arraylist nullpointerexception

我试图编写一段代码,允许人们将不同地震的数据添加到不同的天文台,并允许您提取有关它们的数据。

当我通过终端时,我可以添加天文台,但是当涉及到添加地震并将它们放入特定天文台时,我会收到java.lang.Nullpointerexception错误。

public void AddQuake(String name, int magnitude, int latitude, int longitude, int year) {
    Observatory myObservatory = getObservatory(name);
    // specify an observatory to store it in every time a quake is created.
    Earthquake currentQuake = (new Earthquake(name, magnitude, latitude, longitude, year)); //setting local variable
    allQuakes.add(currentQuake); //adding to  arraylist
    if (currentQuake.GetMagnitude() > 4) {
        bigQuakes.add(currentQuake);
    }
    if (currentQuake.GetMagnitude() >= biggestMagnitudeEver) {
        biggestQuakeEver = currentQuake; // decides the biggest earthquake ever recorded.
    }

    myObservatory.addQuakeHere(currentQuake); //adding to specified observatory
}

getObservatory方法是一个迭代器,它从天文台对象的数组列表中选择天文台,它可以在其他任何地方正常工作。

这一切都很好,直到最后一行。 addQuakeHere是一个从天文台类中提取的方法,用于在arraylist中添加和保持地震,但是当我通过终端运行它并到达此部分时,我得到一条Java.lang.nullpointerexception消息。为什么呢?

根据要求,天文台类的代码:

public class Observatory
{
  private ArrayList <Earthquake> quakes;

  public Observatory(String name, String country, int startYear, int area) {
    quakes = new ArrayList<Earthquake>(); //array list containing quakes.
    //other constructors and things omitted.

  }
  public void addQuakeHere(Earthquake quake){
    quakes.add(quake);
  }
}

按要求,getObservatory方法:

public Observatory getObservatory(String name){ // method to select a certain observatory.
  Iterator iter = allObservatories.iterator(); 
  while(iter.hasNext()) { //while there is another observatory in the queue.
    Observatory currentObserve =(Observatory) iter.next(); //move on to the next one.
    if(name == currentObserve.GetName()){
      return currentObserve; //if the name matches the input parameter, return the observatory.
    }
  }
  return null;
}

1 个答案:

答案 0 :(得分:0)

if(name == currentObserve.GetName()){

那一行。

您正在比较字符串,但未使用.equals()。所以它比较两个String对象的内存位置,它们不相等,所以它只是继续...而且从不找到任何,所以返回null。 (不知道为什么它显然在其他地方有用......)

通常,如果要调用的方法具有返回null的能力,则需要检查null。这个可能无法找到一个天文台,因此可以返回null。因此,为了防止将来出现NPE,检查getObservatory()实际上是否返回了某些内容将是GoodPractice®。