Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用.add for arraylist不会';好像不行,我做错了什么?_Java_Arraylist - Fatal编程技术网

Java 使用.add for arraylist不会';好像不行,我做错了什么?

Java 使用.add for arraylist不会';好像不行,我做错了什么?,java,arraylist,Java,Arraylist,好的,当我运行这段代码时,主类调用addPoint并传递一个点,但是当它到达“points.add(p);”行时,它会给我一个“java.lang.NullPointerException”错误。仅供参考:“points”是一个arrayList 另外,我是否在使用“returnpoints.add(p);”右侧返回布尔值?另一方面,我似乎没有调用“extremes();”对,因为我得到了一个无法访问的代码错误 谢谢你的帮助!:) 您是对的,extremes()永远不会被调用。对最后两行重新排序

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

另外,我是否在使用“returnpoints.add(p);”右侧返回布尔值?另一方面,我似乎没有调用“extremes();”对,因为我得到了一个无法访问的代码错误


谢谢你的帮助!:)

您是对的,extremes()永远不会被调用。对最后两行重新排序,或者如果顺序很重要,则执行以下操作:

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

我还建议您整齐地格式化代码,以便更易于阅读,并使用比例如
extremes
更具描述性的名称。目前还不清楚这种方法是在搜索极端值并返回它们,还是因为某些副作用而调用它。如果是前者,那么您实际上没有使用返回值就很奇怪了——也许这是代码中的另一个错误。

您得到了一个无法访问的代码错误,因为对extremes()的调用是在返回之后。您的方法将始终返回,并且永远不会到达那里

我想你想要的是

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

无需调用add两次。

您可能忘记初始化ArrayList(即
)。就这样做吧:

 public boolean addPoint (Point p) {
     boolean didAdd = points.add(p);
     extremes();
     return didAdd;
 }
classyourclass{
私有最终列表点=新建ArrayList();
公共布尔添加点(点p){
布尔结果=点。添加(p);
极端();
返回结果;
}
}

您的NullPointerException是因为points为null-您在构造函数中新建了它吗

除非你想在列表中重复两次,否则你不想重复两次。您可能想做的是:

class YourClass {

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

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

显示的代码无法编译!什么是
extremes()
?private void extremes(){for(inti=0;i this.right){this.right=p.getX();}如果(p.getY()this.top=p.getY();}我不是说“请,显示
extremex
code”,我的意思是你的代码不会在编译时出现
不可访问代码错误
(line with
extremes()
就是不可访问的代码)。如果我只运行返回语句,它还会把我的观点放在数组列表中吗?@adam,我不明白你的问题。如果调用addPoint方法,则该方法中的所有语句都将执行。您不能“仅运行该返回语句”,这里不需要使用对象类型(即布尔而不是布尔)。好的,在开始时,我声明:“private ArrayList points;”够了吗?等等,开玩笑吧,我看到了。谢谢添加了对
extremes()
的调用,以使这是一个完整的答案+1不,我没有,我在顶部运行语句“private arrarylist points;”,但是我不知道如何将“new”部分仅放在构造函数中,而不将“private arrarylist points=new arrarylist();”放在顶部。这有意义吗?是的,你能做到。你也可以把
私有数组列表点和'this.points=new ArrayList();'在构造函数中。
public boolean addPoint (Point p) {
  boolean result = points.add(p);
  extremes();
  return result;
}