2013-12-08 60 views
-2

我是編程新手,所以如果我問一個可以很容易修復的問題,請原諒我。我的程序有一個主測試器類。當我將它發送給我的RegularPolygon類時,它將它發送給錯誤的構造函數。我有兩個構造函數。 1沒有perameters我的測試人員是錯誤的構造函數

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.

+5

如果你真的使用'new RegularPolygon(numSides,sideLength);',它絕對不會將它發送給第一個構造函數。 –

+0

是的,你爲什麼認爲它確實到了好的?你可以給所有的班級代碼,也許你在其他地方犯了一個錯誤。 –

+0

你在做什麼讓你確信第一個構造函數正在被使用?你爲什麼不添加一個調試器來遍歷它,或者在你的構造函數中做'System.out.println(「構造函數A」);' – nhgrif

回答

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 

所以,有一種調試方式可以清除對構造函數是什麼的疑問b eing被調用,numSidessideLength的值應該被初始化爲什麼值。您可以在任何其他方法中使用此調試模式來驗證,是的,這確實是被調用的方法,並且是的,此方法使用的值實際上是我打算使用的值。

在您的測試類,我會做這樣的事情:

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

這一切只是調試101.但這裏的問題是,你讓你的代碼是意外,因爲行爲的假設的罪魁禍首A,但實際上,有幾個不同的事情可能會導致問題。你確信錯誤的構造函數被調用,所以這些代碼片段會爲你提供一些證據。它可能是錯誤的構造函數被調用,或者可能是正確的構造函數被調用,但有錯誤的參數。無論哪種方式,我們都需要從測試者類中看到更多的代碼,以查看可能的原因,因爲您在答案中提供的代碼絕對會導致調用兩個參數的構造函數...但是你不告訴我們你傳遞了什麼值。

+0

謝謝,我意識到我的問題在vertexAngle()方法中。我將它改爲vertexAngle(int numSides,double sideLength),然後用這些參數調用它。它現在完美地工作。感謝您的調試幫助 – user3080262