Java中类的驱动程序“Rectangle"

时间:2017-03-28 22:38:21

标签: java class methods instantiation mutators

我从未在Java中使用单独的文件作为驱动程序。我习惯于使用main方法。我在Python中使用了单独的文件,但Java是新的。下面是我的每个类的代码(“矩形”和“驱动程序”),每个类都来自不同的文件。

更新方法更改为静态:不要注意类名称或格式的更改...我只是调整所以它将适用于MyProgrammingLab。我仍然需要添加长度和宽度的参数仅在0.0和20.0之间(if if-else语句很简单)。

import java.util.Scanner;

公共类驱动程序{

public static void main(String[] args) {

    Scanner input = new Scanner( System.in);

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

    Rectangle  Perimeter = new Rectangle(length, width);
    Perimeter.getPerimeter();
    Rectangle  Area = new Rectangle(length, width);
    Area.getArea();

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

}

}

final class Rectangle {

private static double mLength;
private static double mWidth;

public Rectangle(double length, double width){
    mLength = length;
    mWidth = width;
}   
public double getLength(){
    return mLength;
}

public double getWidth(){
    return mWidth;
}

public static double getArea(){
    double area = mWidth*mLength;
    return area;    
}
public static double getPerimeter(){
    double perimeter = (mWidth*2)+(mLength*2);
    return perimeter;

}

}

2 个答案:

答案 0 :(得分:1)

创建一个Rectangle对象更长一段时间&宽度,请通过传递Rectanglelength参数(由用户输入)来使用重载的width构造函数,如下所示:

Rectangle  Perimeter = new Rectangle(length, width);
  

构造函数Rectangle()未定义。有人可以帮忙吗?

重要的一点是,如果你的Rectangle类中有一个重载的构造函数(没有默认值,也就是没有编写参数构造函数),你就无法创建一个对象new Rectangle();,这是因为编译器没有为您自动添加默认的constrcutor 。我建议您查看here了解更多详情。

另外,如果您想使用Rectangle打印length对象& width详细信息,您需要使用override方法toString() java.lang.Object方法,如下所示:

public class Rectangle {

    private double mLength;

    private double mWidth;

    //add your code here as is

    @Override
    public String toString() {
        return "Rectangle [mLength=" + mLength + ", mWidth=" + mWidth + "]";
    }
}

答案 1 :(得分:0)

如果没有显式编写构造函数,则编译器会提供默认构造函数。

但是如果你在类中明确地编写任何构造函数,那么无论何时调用构造函数,无论是无参数还是带参数,它总是在类中查找显式定义的构造函数。

而且,这在逻辑上是正确的,因为如果你想阻止创建没有任何数据的对象,那么添加一个带有argiment的构造函数是可行的。

所以要么在Rectangle中显式写一个无参数构造函数,并使用setter来设置它的attributs,或者只是在你的方法中使用参数构造函数。

向Rectangle.class添加一个空构造函数:

public Rectangle() {

} 

或者使用方法

中使用参数声明的构造函数
Rectangle rectangle = new Rectangle(length, width);

在您的情况下,您使用的矩形对象是错误的。 我认为你要做的是:

Rectangle  rectangle = new Rectangle(length , width );
System.out.printf("Area: %.1f, Perimeter: %.1f",rectangle.getArea() ,rectangle.getPerimeter());