【问题标题】:Bluej math tester class errorBluej 数学测试器类错误
【发布时间】:2013-12-01 21:31:20
【问题描述】:

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

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.getTheArea(), 0.00001);

由于某种原因,它会导致它失败。我不知道为什么,其他一切都很好。任何帮助表示赞赏。

谢谢 -基伦

【问题讨论】:

    标签: java interface bluej


    【解决方案1】:

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

    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));
    }
    

    【讨论】:

      【解决方案2】:

      在代码中

      theArea=(s*(s-a)*(s-b)*(s-c));
      

      应该是

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

      【讨论】:

        【解决方案3】:

        这是因为您在计算三角形面积时有错误代码。 应该是这样的:

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

        希望这会有所帮助。

        【讨论】:

        • 是的,谢谢大家。我现在觉得很蠢,我在看老师在网上放的笔记,就在那里,用粗体字写着“所有特殊的数学运算都必须有'数学'。”在他们面前”... DERP!
        • @KeelenBerkenkotter :很高兴您解决了您的程序问题。这是一个小错误。程序的其余部分看起来不错且组织良好。
        猜你喜欢
        • 2017-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-24
        • 2023-03-04
        • 2020-02-09
        • 2014-03-19
        • 1970-01-01
        相关资源
        最近更新 更多