2013-10-29 18 views
0

我不得不使用外部類的值來運行我的主要方法。我的課外(Circle類)如下:我的TestCircle java代碼運行不正確

import java.text.DecimalFormat; 

public class Circle 
{  //start class Circle 
    private double radius;  //stores user input for radius 
    private int x;  //stores user input for x 
    private int y;  //stores user input for y 

    public Circle() 
    {  //open Circle() 
    }  //close Circle() 

    public Circle (double radius) 
    {  //start Circle 
     setRadius(radius); 
    }  //end Circle(double) 

    public Circle (int x, int y) 
    {  //start Circle 
     setX(x); 
     setY(y); 
    }  //end Circle(int, int) 

    public Circle (double radius, int x, int y) 
    {    //start Circle 
     setX(x); 
     setY(y);  
     if (radius > 0)  //makes sure radius has a correct value 
     { 
      this.radius=radius;  //stores the input radius if it is positive 
     } 
    }  // end Circle (double, int, int) 

    public void setRadius(double radius) 
    {  //start setRadius 
     if (radius > 0)  //stores correct variable input for radius 
     { 
      this.radius=radius; 
     } 
    }  //end setRadius(double) 

    public void setX(int x) 
    {  //start setX 
     setX(x);  //stores X (user input) for x 
    }  //end setX(int) 

    public void setY(int y) 
    {  //start setY   
     setY(y);  //stores Y (user input) for y 
    }  //end setY(int) 

    public void setXY(int x, int y) 
    {  //start setXY 
     setXY(x,y);  //stores values for X and Y 
    }  //end setXY 

    public double getRadius() 
    {  //start getRadius 
     double dVal;  //stores the value for radius 
     dVal=this.radius;  //stores the value for radius for the input circle 

     return dVal;  //returns the value for radius 
    }  //end getRadius() 

    public int getX() 
    {  //start getX 
     return x;  //returns the value of x 
    }  //end getX() 

    public int getY() 
    {  //starts getY 
     return y;  //returns the value of y 
    }  //ends getY 

    public double area() 
    {  //start area() 
     double dArea;  //stores the value of dArea 

     dArea= radius * radius * 3.141599999; //how dArea is calculated 

     return dArea;  //returns the value stored to dArea 
    } //end area() 

    public double circumference() 
    {  //start circumference 
     double dCircum;  //stores the value of dCircumference 

     dCircum= (2* radius) * 3.1415999999;  //how dCircumerence is calculated 

     return dCircum;  //returns the calculated value of dCircumference 
    } //end circumference() 

    public String toString() 
    {  //start toString 
     DecimalFormat df= new DecimalFormat ("0.000"); 
     double dCircum= circumference(); 
     double dArea= area(); 
     String strStuff; 
     strStuff= "\nRadius: " +this.radius; 
     strStuff+= "\nXCoord: " + x; 
     strStuff+= "\nYCoord: " + y; 
     strStuff+= "\nArea: " + df.format(dArea); 
     strStuff+="\nCircumference: " + df.format(dCircum); 
     strStuff+="\n\n"; 

     return strStuff;  //returns the values of the class 
    }  //end toString 
} 

//end Circle class 

以下是我TestCircle類
公共類TestCircle

{  //start TestCircle 
public static void main(String[] args) 
{  //starts main 
    Circle c1= new Circle(7,0,14); 


    double dRad;  //stores a value to dRad 
    dRad= c1.area();  //runs area() for the stored values 
}  //ends main 
}   //ends TestCircle 

他們都編譯正常,但是當我跑我TestCircle類只是prings這一遍又一遍地「在Circle.setX(Circle.java.44)。我猜這跟我在第44行設置X的地方有關,但我不知道該怎麼辦,請幫助。

+0

不是一個答案裏面,但請 - 寫'Math.PI '而不是'3.141599999'。後者笨拙,實際上不正確。 –

回答

2

您的setX方法只是調用自己,這會調用自身,然後調用自己,等等,直到Java實例用完堆棧空間。你需要讓setX做這樣的事情。

public void setX(int x){ 
    this.x = x; 
} 

您將有setYsetXY類似的問題。

+0

它工作。萬分感謝。 – Jon5001

0

你在你的setX()方法裏面調用你的setX()方法。這是一個遞歸調用。由於沒有條件將永遠運行下去,你會得到一個堆棧溢出異常

剛剛設置的值傳遞到您的實例變量,方法

public void setX(int x){ 
    this.x = x; 
} 
相關問題