我的测试人员将使用错误的构造函数

时间:2013-12-08 17:05:54

标签: java

我是编程新手,所以如果我问一个可以轻松修复的问题,请原谅我。我的程序有一个带有main的测试器类。当我将它发送到我的RegularPolygon类时,它将它发送到错误的构造函数。我有两个构造函数。 1没有参数

public RegularPolygon()
    {
       myNumSides = 5;
       mySideLength = 30;
    }//end default constructor

和我的第二个,有perameters。

public RegularPolygon(int numSides, double sideLength)
    {
        myNumSides = numSides;
        mySideLength = sideLength;
    }// end constructor

在我的测试人员课程中,我有以下两行:

RegularPolygon shape = new RegularPolygon(numSides, sideLength);
        shape.menu();

在测试类的早期声明并初始化了numSides和sideLength。

所以我想要发生的是,测试者类将numSides和sideLength发送到第二个构造函数并在该类中使用它。但它只使用默认的构造函数,因此破坏了程序的其余部分。有人可以帮帮我吗?

对于那些想要查看更多代码的人:请转到

public double vertexAngle()
    {
        System.out.println("The vertex angle method: " + myNumSides);// prints out 5
        System.out.println("The vertex angle method: " + mySideLength); // prints out 30

        double vertexAngle;
        vertexAngle = ((myNumSides - 2.0) / myNumSides) * 180.0;
        return vertexAngle;
    }//end method vertexAngle

public void menu()
{
    System.out.println(myNumSides); // prints out what the user puts in
    System.out.println(mySideLength); // prints out what the user puts in
    goToGraphic();
    calcR(myNumSides, mySideLength);
    calcr(myNumSides, mySideLength);
    print(); 
}// end menu

这是我的整个测试人员课程:

public static void main(String[] arg)
{
    int numSides;
    double sideLength;
    Scanner keyboard = new Scanner(System.in);

    System.out.println("Welcome to the Regular Polygon Program!");
    System.out.println();

    System.out.print("Enter the number of sides of the polygon ==> ");
    numSides = keyboard.nextInt();
    System.out.println();

    System.out.print("Enter the side length of each side ==> ");
    sideLength = keyboard.nextDouble();
    System.out.println();

    RegularPolygon shape = new RegularPolygon(numSides, sideLength);
    shape.menu();
}//end main

为了测试它,我发送了numSides 4和sideLength 100。

1 个答案:

答案 0 :(得分:1)

public RegularPolygon() {
   System.out.println("Default constructor called.");
   myNumSides = 5;
   mySideLength = 30;
}//end default constructor

public RegularPolygon(int numSides, double sideLength) {
    System.out.println("Two-argument constructor called.");
    System.out.println("numSides = " + numSides + ", sideLength = " + sideLength);
    myNumSides = numSides;
    mySideLength = sideLength;
}// end constructor

因此,有一种形式的调试可以清除对正在调用的构造函数以及numSidessideLength的值应该被初始化的疑问。您可以在任何其他方法中遵循此调试模式来验证,是的,这确实是被调用的方法,是的,此方法使用的值确实是我打算使用的值。

在你的测试课上,我会做这样的事情:

System.out.println("numSides = " + numSides + ", sideLength = " + sideLength);
System.out.println("Instantiating RegularPolygon with numSides & sideLength");
RegularPolygon shape = new RegularPolygon(numSides, sideLength);

这只是调试101.但这里的重点是你假设你的代码由于Culprit A而出乎意料地行为,但实际上,有几个不同的东西可能导致问题。您确信正在调用错误的构造函数,因此这些代码片段将为您提供有关正在发生的事情的一些证据。可能是正在调用错误的构造函数,或者可能是正在调用正确的构造函数但是使用了错误的参数。

无论哪种方式,我们都需要查看测试人员类中的更多代码,看看可能是什么原因,因为您在答案中提供的代码绝对会导致调用双参数构造函数。 ..但你没告诉我们你传递的是什么价值。