问题陈述:
创建一个具有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
答案 0 :(得分:0)
要调用类的方法,您应该拥有该类的实例。在这种情况下,您尝试访问类Rectangle
中Driver
类的方法,这是不可能的。因此,您必须创建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);
}
}
}