2

编译我的 main 时出现错误,并且错误来自我的类​​文件。这样做的目的是创建一个程序,该程序要求用户创建一个圆,然后将面积、直径和周长返回给用户。

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
4

2 回答 2

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;
}
于 2013-07-04T15:21:58.220 回答
2

您应该替换此方法:

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

这样 :

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

即它不应该带任何参数,并返回圆周作为结果值。

编辑

你应该修改你的getAreaand getDiameter

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

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

编辑2

如果我可以这样说,您应该进一步修改您的代码。首先,你的Circle类应该是这样的:

  • PI是一个静态常量(对于 Circle 的每个实例都相同)
  • 您应该添加一个带有radius参数的构造函数,因此您可以实例化一个新Circle的提供radius
  • 直径、面积和周长不需要类中的属性。它们直接计算自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());
    }
}

我删除了一些无用的变量(circumference,piarea),修改了实例化Circle对象的方式(使用新的构造函数)并修改了对getArea(),getDiameter()的调用getCircumference()(您将它们称为静态方法,但您需要在实例化时调用它们,circle因为它们是不是静态方法)。

我建议您看一下了解实例和类成员从方法 Oracle 的文章中返回值,更一般地看一下整个类和对象一章

于 2013-07-04T15:22:32.710 回答