Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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 Bluej数学测试仪类错误_Java_Interface_Bluej - Fatal编程技术网

Java Bluej数学测试仪类错误

Java Bluej数学测试仪类错误,java,interface,bluej,Java,Interface,Bluej,我还有一个计算机科学问题。我正在为AP计算机科学做一个实验室,里面有两个骨架代码,一个测试类和一个接口类。我们的工作是让测试人员无错误地运行。我得到的代码是三角形数学代码(边长、周长、面积等等)。我让它可以运行,但有一个测试一直失败。我不知道为什么,请帮帮我。 以下是三角形的主要代码: import java.util.Scanner; import java.lang.Math.*; import java.lang.*; public class Triangle implements T

我还有一个计算机科学问题。我正在为AP计算机科学做一个实验室,里面有两个骨架代码,一个测试类和一个接口类。我们的工作是让测试人员无错误地运行。我得到的代码是三角形数学代码(边长、周长、面积等等)。我让它可以运行,但有一个测试一直失败。我不知道为什么,请帮帮我。 以下是三角形的主要代码:

import java.util.Scanner;
import java.lang.Math.*;
import java.lang.*;

public class Triangle implements TestableTriangle
{
    private int sideA, sideB, sideC;
    private double perimeter;
    private double theArea;

    public Triangle()
    {
       setSides(0,0,0);
       perimeter=0;
       theArea=0;
    }

    public Triangle(int a, int b, int c)
    {
        sideA=a;
        sideB=b;
        sideC=c;
    }

    public void setSides(int a, int b, int c)
    {
        sideA=a;
        sideB=b;
        sideC=c;
    }

    public void calcPerimeter( )
    {
        perimeter=(sideA+sideB+sideC);


    }

    public void calcArea( )
    {
        double s;
        s=(perimeter/2);
        theArea=(s*(s-a)*(s-b)*(s-c));


    }

    public void print( )
    {
        System.out.println("\n\n");
        System.out.println(sideA+" "+sideB+" "+sideC+"\n");
    }

    public int getSideA()
    {
        return sideA;
    }

    public int getSideB()
    {
        return sideB;     
    }

    public int getSideC()
    {
        return sideC;
    }
    public double getPerimeter()
    {
        return perimeter;
    }
    public double getTheArea()
    {
        return theArea;
    }

}
这是实验室代码。此类用于测试三角形

import java.util.Scanner;
import java.lang.Math.*;
public class Lab03a  //this class is used to test Triangle
{
    public static void main( String[] args )
    {
        Scanner keyboard = new Scanner(System.in);

        //ask for user input
        System.out.print("Enter side A ::  ");
        int a = keyboard.nextInt();

        System.out.print("Enter side B ::  ");
        int b = keyboard.nextInt();

        System.out.print("Enter side C ::  ");
        int c = keyboard.nextInt();


        Triangle test = new Triangle(a, b, c);
        test.calcPerimeter();
        test.calcArea();
        test.print();


        //ask for user input
        System.out.print("Enter side A ::  ");
        a = keyboard.nextInt();

        System.out.print("Enter side B ::  ");
        b = keyboard.nextInt();

        System.out.print("Enter side C ::  ");
        c = keyboard.nextInt();


        test.setSides(a,b,c);
        test.calcPerimeter();
        test.calcArea();
        test.print();


        //add one more input section
        System.out.print("Enter side A ::  ");
        a = keyboard.nextInt();

        System.out.print("Enter side B ::  ");
        b = keyboard.nextInt();

        System.out.print("Enter side C ::  ");
        c = keyboard.nextInt();


        test.setSides(a,b,c);
        test.calcPerimeter();
        test.calcArea();
        test.print();
    }
}
以下是接口代码:

public interface TestableTriangle
{
    public void setSides(int a, int b, int c);

    public void calcPerimeter( );

    public void calcArea( );

    public void print( );

    public int getSideA();

    public int getSideB();

    public int getSideC();

    public double getPerimeter();

    public double getTheArea();
}
以下是检测仪代码(下面是显示的错误消息): 导入静态org.junit.Assert.*; 导入org.junit.After; 导入org.junit.Before; 导入org.junit.Test

public class TriangleTest
{
    private Triangle triangle1;

    /**
     * Default constructor for test class TriangleTest
     */
    public TriangleTest()
    {
    }

    /**
     * Sets up the test fixture.
     *
     * Called before every test case method.
     */
    @Before
    public void setUp()
    {

        triangle1 = new Triangle(37, 38, 39);
    }

    /**
     * Tears down the test fixture.
     *
     * Called after every test case method.
     */
    @After
    public void tearDown()
    {
    }

    @Test
    public void testConstructorAndSides()
    {
        //Triangle triangle1 = new Triangle(35, 36, 37);
        assertEquals(37, triangle1.getSideA());
        assertEquals(38, triangle1.getSideB());
        assertEquals(39, triangle1.getSideC());
    }

    @Test
    public void testConstructorAndPerimeter()
    {
        //Triangle triangle1 = new Triangle(36, 37, 38);
        assertEquals(0.0, triangle1.getPerimeter(), 0.1);
        triangle1.calcPerimeter();
        assertEquals(114.0, triangle1.getPerimeter(), 0.1);
    }

    @Test
    public void testSetSidesAndSides()
    {
        //Triangle triangle1 = new Triangle(37, 38, 39);
        triangle1.setSides(10, 15, 16);
        assertEquals(10, triangle1.getSideA());
        assertEquals(15, triangle1.getSideB());
        assertEquals(16, triangle1.getSideC());
    }

    @Test
    public void testSetSidesAndPerimeter()
    {
        Triangle triangle2 = new Triangle();
        triangle2.calcPerimeter();
        assertEquals(0.0, triangle2.getPerimeter(), 0.1);
        triangle2.setSides(38, 39, 40);
        assertEquals(0.0, triangle2.getPerimeter(), 0.1);
        triangle2.calcPerimeter();
        assertEquals(117.0, triangle2.getPerimeter(), 0.1);
    }

    @Test
    public void testSetSidesAndTheArea()
    {
        Triangle triangle2 = new Triangle();
        assertEquals(0.0, triangle2.getTheArea(), 0.1);
        triangle2.setSides(12, 13, 14);
        triangle2.calcArea();
        assertEquals(-0.0, triangle1.getTheArea(), 0.1);
        triangle2.calcPerimeter();
        triangle2.calcArea();
        assertEquals(72.30794, triangle2.getTheArea(), 0.00001);
    }


}
错误消息说这行有问题:

assertEquals(72.30794,triangle2.gettherea(),0.00001)

出于某种原因,它导致它失败。我不知道为什么,其他一切都很完美。感谢您的帮助

谢谢
-Keelen

你忘了取面积表达式的平方根。您似乎没有使用正确的变量名:

public void calcArea( )
{
    // ensure perimeter is up-to-date!
    calcPerimeter();
    double s = (perimeter / 2.0);
    theArea = Math.sqrt(s * (s - sideA) * (s - sideB) * (s - sideC));
}
在代码中

theArea=(s*(s-a)*(s-b)*(s-c));
应该是

theArea=Math.sqrt((s*(s-a)*(s-b)*(s-c)));

这是因为在计算三角形的面积时,代码不正确。 其内容应如下:

public void calcArea( )
{
    double s;
    s=(perimeter/2);
    theArea=Math.sqrt((s*(s-a)*(s-b)*(s-c)));


}

希望这有帮助。

是的,谢谢大家。我现在觉得自己真的很傻,我正在看老师放在网上的笔记,上面用粗体字写着“所有特殊数学运算都必须有‘数学’在前面”。。。德普@KeelenBerkenkotter:我很高兴你开始讨论你的计划。这是一个小错误。节目的其余部分看起来不错,组织得很好。