Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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,我在一个编程原理II的实验室里工作,我有一个类,它可以创建一个点,有一些方法可以设置点,并计算其他点之间的距离。当使用runner仅对类进行测试时,计算距离效果很好,但是当我创建其他将其用作对象的类时,距离公式会出错 import java.lang.Math; public class MyPoint { private double x; private double y; public MyPoint(double dubx, double duby) { x=dubx;

我在一个编程原理II的实验室里工作,我有一个类,它可以创建一个点,有一些方法可以设置点,并计算其他点之间的距离。当使用runner仅对类进行测试时,计算距离效果很好,但是当我创建其他将其用作对象的类时,距离公式会出错

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是最难看的