Java 我的测试人员找错了构造器

Java 我的测试人员找错了构造器,java,Java,我是编程新手,所以如果我问了一个很容易解决的问题,请原谅我。我的程序有一个带有main的tester类。当我将其发送到我的RegularPolygon类时,它会将其发送到错误的构造函数。我有两个构造器。1不带万用表 public RegularPolygon() { myNumSides = 5; mySideLength = 30; }//end default constructor 还有我的第二个,用万用表 public RegularPoly

我是编程新手,所以如果我问了一个很容易解决的问题,请原谅我。我的程序有一个带有main的tester类。当我将其发送到我的RegularPolygon类时,它会将其发送到错误的构造函数。我有两个构造器。1不带万用表

public RegularPolygon()
    {
       myNumSides = 5;
       mySideLength = 30;
    }//end default constructor
还有我的第二个,用万用表

public RegularPolygon(int numSides, double sideLength)
    {
        myNumSides = numSides;
        mySideLength = sideLength;
    }// end constructor
在我的tester类中,我有以下两行代码:

RegularPolygon shape = new RegularPolygon(numSides, sideLength);
        shape.menu();
numSides和sideLength是在测试类的前面声明和初始化的

所以我想做的是,tester类将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

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
因此,有一种调试形式可以消除关于调用什么构造函数以及初始化
numSides
sideLength
的值的疑问。您可以在任何其他方法中遵循此调试模式来验证,是的,这确实是正在调用的方法,是的,此方法使用的值确实是我希望它使用的值

在您的tester类中,我会这样做:

System.out.println("numSides = " + numSides + ", sideLength = " + sideLength);
System.out.println("Instantiating RegularPolygon with numSides & sideLength");
RegularPolygon shape = new RegularPolygon(numSides, sideLength);
这只是调试101。但这里的要点是,您假设您的代码由于罪魁祸首A而出现意外行为,但实际上,有几种不同的情况可能导致问题。您确信调用了错误的构造函数,因此这些代码片段将为您提供一些关于发生了什么的证据。可能是调用了错误的构造函数,也可能是调用了正确的构造函数,但参数错误


不管是哪种方式,我们都需要从tester类中查看更多的代码,以了解可能的原因,因为您在回答中提供的代码绝对会导致调用双参数构造函数。。。但是你没有告诉我们你要传递什么值。

如果你真的在使用
新的正则多边形(numSides,sideLength),它肯定不会把它发送给第一个构造函数。是的,为什么你认为它适合好的?你能给出所有的类代码吗?也许你在别的地方犯了一个错误。你在做什么使你如此确信第一个构造函数正在被使用?为什么不添加一个调试器来逐步完成它,或者执行
System.out.println(“构造函数a”)
在你的构造函数中…你确定你不只是传递它5和30吗?这不是你的构造函数的问题,它必须在你的代码中的其他地方,你实际上在那里绘制多边形。你,我意识到我的问题是在vertexAngle()方法中。我把它改为vertexAngle(intNumsides,双面长度),然后用那些参数来命名它。现在它工作得很好。也感谢您对调试的帮助