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);”是否返回布尔值?而在另一方面,我似乎并没有称之为“极端();”是的,因为我得到一个无法访问的代码错误。
感谢您的帮助! :)
答案 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;
}