2013-07-04 121 views
2

編譯我的main時出錯,並且錯誤來自我的類​​文件。 這樣做的目的是創建一個程序,需要用戶創建一個圓,然後返回給用戶區域,直徑和圓周。創建一個Circle對象錯誤.Java

java.util.Scanner; 

public class Driver { 

    public static void main(String[] args) { 

    Scanner keyboard = new Scanner(System.in); 

    double circumference; 
    double radius = 5.7; 
    double pi = 3.14159; 
    double area = 0; 

    Circle circleobject = new Circle(); 

    //Get radius 
    System.out.println("What is the circle's Radius?"); 
    radius = keyboard.nextDouble(); 

    if (radius == 0.0) { 
     radius = 5.7; 
    } 

    System.out.println("Creating a circle object."); 
    //Creating the class object 

    Circle circle = new Circle(); 

    System.out.println("Your circle's area: " + Circle.getArea()); 
    System.out.println("Your circle's Diameter " + Circle.getDiameter()); 
    System.out.println("Your circle's Circumference " + Circle.getCircumference()); 
} 

這是我的類文件

public class Circle { 
    double circumference; 
    double radius = 0.0; 
    double pi = 3.14159; 
    double area = 0; 

    public void setRadius() { 
     radius = radius; 
    } 

    public void radius() { 
     radius = 0.0; 
    } 

    public void getArea(double area) { 
     area = 0; 
     area = pi * radius * radius; 
    } 

    public void getDiameter(double diameter) { 
     diameter = radius * 2; 
    } 

    public void getCircumference(double circumference) { 
     circumference = 2 * pi * radius; 
    } 
} 

這是表明,當我編譯的主要錯誤。

Driver.java:38: error: method getCircumference in class Circle cannot be applied to given types; 
System.out.println("Your circle's Circumference " + Circle.getCircumference()); 
                 ^
    required: double 
    found: no arguments 
    reason: actual and formal argument lists differ in length 
    1 error 
+0

你的metods應該是'setArea','setDidameter',...,不是'getArea' ...'gets'方法必須返回... – Sk1X1

+1

不,它應該是'getArea','getDiameter'等等,因爲這個值是從初始參數「radius」和「pi」常量計算而來的。不應該有「直徑」,「面積」和「周長」屬性。 – ssssteffff

回答

4

你的方法

public void getCircumference(double circumference) 
{ 

circumference = 2 * pi * radius; 
} 

應該寫成:

public double getCircumference() { 
    return 2 * pi * radius; 
} 

使用Java約定,應使用下列方式getter和setter方法:

private xxx myAttribute; 
// Here you can check if passed values are correct, for example if you expect a negative value or not. 
public void setMyAttribute(xxx a) { 
    this.myAttribute=a; 
} 

// It just returns the current value 
public xxx getMyAttribute() { 
    return myAttribute; 
} 
2

你應更換此方法:

public void getCircumference(double circumference) { 
    circumference = 2 * pi * radius; 
} 

通過這樣的:

public double getCircumference() { 
    return 2.0 * pi * radius; 
} 

即它不應該使用任何參數,並將結果作爲結果返回。

編輯

你應該修改getAreagetDiameter還有:

public double getArea() { 
    return pi * radius * radius; 
} 

public double getDiameter() { 
    return radius * 2; 
} 

EDIT2

如果我可以這麼說,你應該進一步修改代碼。首先,你的Circle類應該是這樣的:

  • PI是一個靜態常量(同爲圈的每個實例)
  • 您應該添加一個構造帶radius參數,因此,你可以實例化一個新Circle提供radius
  • 直徑,面積和circomference不需要類中的屬性。他們直接計算從radiusPI
  • 增加一個getRadius()方法提供公衆訪問的價值radius

有什麼,我會做一個例子:

public class Circle { 

    private static final double PI = 3.14159; 

    private double radius = 0.0; 

    public Circle(double radius){ 
     setRadius(radius); 
    } 

    public void setRadius(double radius) { 
     this.radius = radius; 
    } 

    public double getRadius() { 
     return radius; 
    } 

    public double getArea() { 
     return PI * radius * radius; 
    } 

    public double getDiameter() { 
     return 2.0 * radius; 
    } 

    public double getCircumference() { 
     circumference = 2.0 * PI * radius; 
    } 
} 

因此,你的主要程序是這樣的:

java.util.Scanner; 

public class Driver { 

    public static void main(String[] args) { 

     Scanner keyboard = new Scanner(System.in); 

     double radius; 

     Circle circleobject = new Circle(radius); 

     //Get radius 
     System.out.println("What is the circle's Radius?"); 
     radius = keyboard.nextDouble(); 

     if (radius == 0.0) { 
      radius = 5.7; 
     } 

     System.out.println("Creating a circle object."); 
     //Creating the object 

     Circle circle = new Circle(radius); 

     System.out.println("Your circle's area: " + circle.getArea()); 
     System.out.println("Your circle's Diameter " + circle.getDiameter()); 
     System.out.println("Your circle's Circumference " + circle.getCircumference()); 
    } 
} 

我刪除一些無用的變量(circumferencepiarea)修改了您實例化Circle對象(使用新構造函數)的方式並將該調用修改爲getArea(),getDiameter(),getCircumference()(你稱它們爲靜態方法,但你需要在實例circle上調用它們,因爲它們不是靜態方法)。

我建議你看一下Understanding Instance and Class MembersReturning a Value from a Method甲骨文的文章,更一般的是整個Classes and Objects chapter