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的值-它们保持为空。因此,在方法区域中,您尝试计算doubleside1=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();
}