我从未在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;
}
}
答案 0 :(得分:1)
创建一个Rectangle
对象更长一段时间&宽度,请通过传递Rectangle
和length
参数(由用户输入)来使用重载的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());