我是Java初学者的初学者。我会做一个应用来计算最大点,最小点,宽度和高度。我在日食中写道。
我成了这个错误:
线程中的异常" main"显示java.lang.NullPointerException 在BoundingBox.height(BoundingBox.java:50) 在App.main(App.java:39)`
我的打印点看起来像
点@ 659e0bfd 点@ 2a139a55 点@ 15db9742
在此代码中,toString方法应该如何?
点
public class Point {
private double x;
private double y;
public Point(double xnew, double ynew) {
x = xnew;
y = ynew;
}
public double getX() {
return x;
}
public void setX(double xnew) {
x = xnew;
}
public double getY() {
return y;
}
public void setY(double ynew) {
y = ynew;
}
}
的BoundingBox
import java.util.List;
public class BoundingBox {
private static Point minPoint;
private static Point maxPoint;
public BoundingBox(List<Point> manyPoints) {
double minX = manyPoints.get(0).getX();
double maxX = manyPoints.get(0).getX();
double minY = manyPoints.get(0).getY();
double maxY = manyPoints.get(0).getY();
for (int i = 0; i < manyPoints.size(); i++) {
Point test = manyPoints.get(i);
test.getX();
if (test.getX() < minX) {
minX = test.getX();
}
if (test.getX() > maxX) {
maxX = test.getX();
}
if (test.getY() < minY) {
minY = test.getY();
}
if (test.getY() > maxY) {
maxY = test.getY();
}
minPoint = new Point(minX, minY);
maxPoint = new Point(maxX, maxY);
}
}
public static double width() {
double a = (maxPoint.getX() - minPoint.getX());
return a;
}
public static double height() {
System.out.println("minPoint = " + minPoint);
System.out.println("maxPoint = " + maxPoint);
double b = (maxPoint.getY() - minPoint.getY());
return b;
}
public Point getMaxPoint() {
return maxPoint;
}
public Point getMinPoint() {
return minPoint;
}
}
应用
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class App {
public static void main(String[] args) {
Point p1 = new Point(10.681,-48.857);
Point p2 = new Point(96.980,20.724);
Point p3 = new Point(66.647,-66.558);
Point p4 = new Point(-2.674,-58.571);
Point p5 = new Point(40.11,-12.342);
Point p6 = new Point(27.782,46.809);
Point p7 = new Point(54.759,-46.709);
Point p8 = new Point(-33.89,-90.787);
Point p9 = new Point(15.84,-67.553);
Point p10 = new Point(19.481,51.331);
List<Point> list1 = new ArrayList<Point>(); // Create ArrayList and add Points
list1.add(p1);
list1.add(p2);
list1.add(p3);
list1.add(p4);
list1.add(p5);
list1.add(p6);
list1.add(p7);
list1.add(p8);
list1.add(p9);
list1.add(p10);
Iterator<Point> itr = list1.iterator( );
while ( itr.hasNext( ) ) {
System.out.println( itr.next( ) );
}
double c = BoundingBox.height();
double d = BoundingBox.width();
System.out.println(" The Points: " + list1 );
System.out.println(" BoundingBox have " + c + "height and" + d + "width." );
System.out.println(" The max Point is " );
System.out.println(" The min Point is " );
}
}
答案 0 :(得分:0)
在尝试调用height()和width()函数之前,您从未创建过BoundingBox类的实例,因此您在行上接收空指针异常
double a = (maxPoint.getX() - minPoint.getX());
当它试图调用maxPoint.getX()和minPoint.getX()时,因为变量中没有存储值
答案 1 :(得分:0)
您的变量:
private static Point minPoint;
private static Point maxPoint;
在BoundingBox
构造函数中初始化,但在您的App
中,您不会调用它,因此它们是null
。只需执行以下操作:
new BoundingBox(list1);
double c = BoundingBox.height();
double d = BoundingBox.width();
和NullPointerException
将消失。