Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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 获取空指针异常错误传递空值_Java - Fatal编程技术网

Java 获取空指针异常错误传递空值

Java 获取空指针异常错误传递空值,java,Java,我想创建一个三角形对象,然后得到三角形的面积和周长。我在Triangle.area和Demo.main得到一个NullPointerException。似乎没有任何值被传递到area方法和permiture方法,但我看不出我的代码哪里出错了。这是我的密码 //POINTCLASS public class Point { private int x; private int y; public Point(int X, int Y){ this.x =

我想创建一个三角形对象,然后得到三角形的面积和周长。我在
Triangle.area
Demo.main
得到一个
NullPointerException
。似乎没有任何值被传递到area方法和permiture方法,但我看不出我的代码哪里出错了。这是我的密码

//POINTCLASS

public class Point {
    private int x;
    private int y;

    public Point(int X, int Y){
        this.x = X;
        this.y = Y;           
    }
    public int getX(){
        return x;
    }
    public int getY(){
        return y;
    }
    public double distance(Point p){
        double distance,dx,dy;
        dx=x-p.x;
        dy=y-p.y;

        distance = Math.sqrt((dx*dx)+(dy*dy));
        return distance;
    }
    public void translate(int dx, int dy){
        x+=dx;
        y+=dy;

    }
    public void scale(int factor){
        x*=factor;
        y*=factor;
    }
    public String toString(){
        String attributes = "x = " + x + "," + " y = " + y;
        return attributes;

    }

}

//TRIANGL CLASS

public class Triangle {
    private int sides = 3;
    private Point point1,point2,point3;
    private Point[] Points;
    public Triangle(Point[] vertices){
        Points = vertices;
    }
    public Triangle(int x1,int y1,int x2,int y2,int x3, int y3){
        point1 = new Point(x1,y1);
        point2 = new Point(x2,y2);
        point3 = new Point(x3,y3);
        Points[0]=point1;
        Points[1]=point2;
        Points[2]=point3;
    }
    public double perimeter(){
        double side1=point1.distance(point2);
        double side2=point2.distance(point3);
        double side3=point1.distance(point3); 

        return side1+side2+side3;
    }
    //issue with code seems to be here
    public double area(){
        double side1=point1.distance(point2);
        double side2=point2.distance(point3);
        double side3=point1.distance(point3);
        double s = perimeter()/2;
        double area = Math.sqrt(s*(s-side1)*(s-side2)*(s-side3));
        return area;
    }
    public String toString(){
        String attributes = "Sides " + sides;
        return attributes;
    }
    public void translate(int dx, int dy){
        Points[0].translate(dx,dy);
        Points[1].translate(dx, dy);
        Points[2].translate(dx, dy);
    }
    public void scale(int factor){
        vertices*=factor;

    }
    public Point getVertex(int i){
        return vertices[i];

    }
}

//MAIN CLASS

public class GDemo {
    public static void main(String[] args) {
        Point p1 = new Point(0,20);
        Point p2 = new Point(20,0);
        Point p3 = new Point(30,30);

        Point[] vertices = {p1,p2,p3};

        Triangle t = new Triangle(vertices);


        System.out.println("Triangle" + t.toString() + " area:" + t.area() + 
                           " perimeter: " + t.perimeter());
        t.translate(10, 15);
        System.out.println("Triangle" + t.toString() + " area:" + t.area() + 
        " perimeter: " + t.perimeter());
        t.scale(2);
        System.out.println("Triangle" + t.toString() + " area:" + t.area() + 
        "perimeter: " + t.perimeter());   
    }
}

调用构造函数
公共三角形(点[]顶点)
时,没有设置点1、点2和点3的值-它们保持为空。因此,在方法区域中,您尝试计算double
side1=point1.距离(point2)它抛出NPE

在创建
三角形
对象时,您正在调用构造函数
三角形(点[]顶点)
。因此,这些字段保持未初始化
private point1、point2、point3这就是为什么您会得到
NullPointerException

固定构造函数应该是这样的:

public Triangle(Point[] vertices){
    Points = vertices;

    // initialize point1, point2, point3 here.
    if(vertices.length > 2){
       this.point1 = vertices[0];
       this.point2 = vertices[1];
       this.point3 = vertices[2];
    }
}

尝试将整个代码放在Try-catch块中,捕获NullPointerException并写入

 e.printStackTrace(); 
例如:

它将显示错误代码的行号

try{

    //your block of code

}catch(NullPointerException e){

    e.printStackTrace();
}