使用.add进行arraylist似乎不起作用,我做错了什么?

时间:2010-09-27 19:01:12

标签: java arraylist


 public boolean addPoint(Point p){
  points.add(p);
  extremes();
  return points.add(p);
 }

好吧,所以当我运行这段代码时,主类调用addPoint并传递一个Point,但是当它到达“points.add(p);”行时它给了我一个“java.lang.NullPointerException”错误。仅供参考:“points”是一个arrayList。

另外在旁注,我使用的是“return points.add(p);”是否返回布尔值?而在另一方面,我似乎并没有称之为“极端();”是的,因为我得到一个无法访问的代码错误。

感谢您的帮助! :)

4 个答案:

答案 0 :(得分:10)

您可能忘记初始化ArrayList(即points)。做这样的事情:

class YourClass {

   private final List<Point> points = new ArrayList<Point>();

   public boolean addPoint (Point p) {
      boolean result = points.add(p);
      extremes();
      return result;
   }
}

答案 1 :(得分:2)

你是对的,extremes()永远不会被调用。要么重新排序最后两行,要么订单很重要,请执行以下操作:

public boolean addPoint(Point p){
     boolean result = points.add(p);
     extremes();
     return result;
}

我还建议您整齐地格式化代码,以便更容易阅读,并使用比例如extremes更具描述性的名称。目前尚不清楚这种方法是否正在寻找极端并返回它们,或者你是否正在调用它以产生一些副作用。如果它是前者那么很奇怪你实际上并没有使用返回值 - 也许这是你代码中的另一个错误。

答案 2 :(得分:2)

您收到无法访问的代码错误,因为您对extremes()的调用是在返回之后。你的方法将永远返回,永远不会到达那里。

我认为你想要的是

 public boolean addPoint (Point p) {
     boolean didAdd = points.add(p);
     extremes();
     return didAdd;
 }

无需再拨两次电话。

答案 3 :(得分:1)

你的NullPointerException是因为points为null - 你是否在构造函数中新建了它?

除非你打算两次坚持列表中的点,否则你不想两次调用points.add(p)。你可能想做的是:

public boolean addPoint (Point p) {
  boolean result = points.add(p);
  extremes();
  return result;
}