Java数学错误
我在一个编程原理II的实验室里工作,我有一个类,它可以创建一个点,有一些方法可以设置点,并计算其他点之间的距离。当使用runner仅对类进行测试时,计算距离效果很好,但是当我创建其他将其用作对象的类时,距离公式会出错Java数学错误,java,Java,我在一个编程原理II的实验室里工作,我有一个类,它可以创建一个点,有一些方法可以设置点,并计算其他点之间的距离。当使用runner仅对类进行测试时,计算距离效果很好,但是当我创建其他将其用作对象的类时,距离公式会出错 import java.lang.Math; public class MyPoint { private double x; private double y; public MyPoint(double dubx, double duby) { x=dubx;
import java.lang.Math;
public class MyPoint {
private double x;
private double y;
public MyPoint(double dubx, double duby)
{
x=dubx;
y=duby;
}
public void setX(double dub) {
x = dub;
}
public void setY(double dub) {
y = dub;
}
public double getX() {
return x;
}
public double getY()
{
return y;
}
public double distance (MyPoint otherPoint)
{
return Math.sqrt(Math.pow((otherPoint.getX()-getX()),2)+(Math.pow((otherPoint.getY()-getY()),2)));
}
public MyPoint midpoint(MyPoint otherPoint)
{
MyPoint point = new MyPoint((otherPoint.getX()+getX()/2),(otherPoint.getY()+getY())/2);
return point;
}
}
这就是我发现错误的班级。距离部分正在获取空指针异常
以下是我要介绍的内容:
import java.lang.Math;
public class MyTriangle
{
private MyPoint v1;
private MyPoint v2;
private MyPoint v3;
public MyPoint getPoint1()
{
return v1;
}
public MyPoint getPoint2()
{
return v2;
}
public MyPoint getPoint3()
{
return v3;
}
public void setPoint1(double x, double y)
{
v1= new MyPoint(x,y);
}
public void setPoint2(double x, double y)
{
v2 = new MyPoint(x,y);
}
public void setPoint3(double x, double y)
{
v2= new MyPoint(x,y);
}
public double getArea()
{
double a= v2.distance(v3);
double b= v1.distance(v3);
double c= v1.distance(v2);
double s= (a+b+c)/2;
return Math.sqrt(s*(s-a)*(s-b)*(s-c));
}
}
public class TestMyTriangle
{
public static void main(String [] args)
{
MyTriangle tr1 = new MyTriangle();
tr1.setPoint1(17,17);
tr1.setPoint2(5,30);
tr1.setPoint3(5,17);
System.out.println("Area:\t"+tr1.getArea());
}
}
错误是:
Exception in thread "main" java.lang.NullPointerException
at MyPoint.distance(MyPoint.java:34)
at MyTriangle.getArea(MyTriangle.java:37)
at TestMyTriangle.main(TestMyTriangle.java:9)
我似乎不明白。请提供帮助。由于v3为空,因此您将获得空指针: 修复为:
public void setPoint3(double x, double y)
{
v3= new MyPoint(x,y); // instead of v2
}
另一个技巧:计算正方形时不要使用Math.pow(x,2)。
尽管有效。
如果您使用
x*x instead Math.pow(x,2);
public void setPoint3(double x,double y){v2=new MyPoint(x,y);}
。但仍然有一个错误。面积应该是30,但我得到了78。试着接受我的答案,因为它现在已经关闭了,你无法得到另一个答案。你为什么一开始就回答重复的问题?没关系,只是计算一下,78是正确的,实验室提示说应该是30。我猜教授是错的。谢谢抱歉,这样愚蠢的编码错误浪费了您的时间。@redFIVE我不能回答重复的问题。当我回答时,它没有被标记为重复。我没有看到重复问题的链接。(链接位置最近在SO发生了变化,它不再像以前一样位于顶部。复制品也没有直接回答他的问题。评论中的暗示很难理解。使用Math.pow(x,2)代替x*x是最难看的