为什么我的主要课程不能识别我的方法?

时间:2016-12-03 07:53:44

标签: java

问题陈述:

创建一个具有double属性length和width的Rectangle类。默认构造函数应将这些属性设置为:1。提供计算矩形的周长和面积的方法,以及两个数据字段的访问器和变换器。长度和宽度的mutator方法应验证传入的数字是否大于0.0且小于20.0 - 如果它不符合这些标准,则不应更改字段的值。

在同一个文件中编写一个Driver类来测试Rectangle类。它应该提示用户输入矩形的长度和宽度,然后打印出矩形的区域和周长。 (使用mutators设置矩形的长度和宽度,而不是构造函数。)

这是示例运行:Sample run

这是我到目前为止的代码:

import java.util.Scanner;

public class Driver{
public static void main(String[] args){
    Scanner input = new Scanner(System.in);

    System.out.print("Enter length of rectangle:");
    double height = input.nextDouble();
    System.out.print("Enter width of rectangle:");
    double width = input.nextDouble();

    System.out.printf("Area: %f, Perimeter: %f", getArea(), getPerimeter());

}

public static class Rectangle {
private double height;
private double width;

public Rectangle(double wid, double high) {
    height = high;
    width = wid;
} 

public void setHeight(double high) {
    width = wid > 0.0 && wid < 20.0 ? wid : 0;
}

public void setWidth(double wid){
    width = wid > 0.0 && wid < 20.0 ? wid : 0;
}

public double getArea() {
    return height*width;
}

public double getPerimeter() {
    return 2*(height + width);
}
}
}

我感谢任何帮助! Error

1 个答案:

答案 0 :(得分:0)

要调用类的方法,您应该拥有该类的实例。在这种情况下,您尝试访问类RectangleDriver类的方法,这是不可能的。因此,您必须创建Rectangle类的实例

Rectangle rect = new Rectangle();

然后您可以访问此实例的方法:

rect.getArea(); 
...

我建议阅读Java基础知识,例如http://android-developers.blogspot.in/2011/06/things-that-cannot-change.html

我评论了所有相关部分,以便您了解代码无效的原因:

public class Driver {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    System.out.print("Enter length of rectangle:");
    double height = input.nextDouble();
    System.out.print("Enter width of rectangle:");
    double width = input.nextDouble();

    Rectangle rect = new Rectangle(); // Create instance of Rectangle
    rect.setHeight(height); // use mutators to set the values
    rect.setWidth(width);

    DecimalFormat df = new DecimalFormat("##.0#");
    System.out.printf("Area: %s, Perimeter: %s", df.format(rect.getArea()), df.format(rect.getPerimeter()));

}

static class Rectangle {
    private double height;
    private double width;

    // default constructor(=constrcutor without parameter) should set dimensions to 1
    public Rectangle() {
        height = 1.0;
        width = 1.0;
    }

    // Define mutators
    public void setHeight(double height) {
        if (height > 0.0 && height < 20.0) {
            this.height = height;
        }
    }

    public void setWidth(double width) {
        if (width > 0.0 && width < 20.0) {
            this.width = width;
        }
    }


    // Define accessors
    double getHeight() {
        return height;
    }

    double getWidth() {
        return width;
    }

    public double getArea() {
        return height * width;
    }

    public double getPerimeter() {
        return 2 * (height + width);
    }
}

}