Java 我的测试人员找错了构造器
我是编程新手,所以如果我问了一个很容易解决的问题,请原谅我。我的程序有一个带有main的tester类。当我将其发送到我的RegularPolygon类时,它会将其发送到错误的构造函数。我有两个构造器。1不带万用表Java 我的测试人员找错了构造器,java,Java,我是编程新手,所以如果我问了一个很容易解决的问题,请原谅我。我的程序有一个带有main的tester类。当我将其发送到我的RegularPolygon类时,它会将其发送到错误的构造函数。我有两个构造器。1不带万用表 public RegularPolygon() { myNumSides = 5; mySideLength = 30; }//end default constructor 还有我的第二个,用万用表 public RegularPoly
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,双面长度),然后用那些参数来命名它。现在它工作得很好。也感谢您对调试的帮助