矩形类Java

时间:2015-05-27 03:42:49

标签: java

好的,这是功课。我不能为我的生活找出我在这里做错了什么。从书中可以看出,set方法应该验证长度和宽度是每个浮点数大于0.0且小于20.0"我以为我拥有它但是当我进行测试时它只给了我区域和周长。

public class Rectangle {
private float width = 1;
private float length = 1;

public Rectangle(float userWidth, float userLength) {
    width = userWidth;
    length = userLength;

}

public void setWidth(float userWidth) {
    if (userWidth < 0.0 || userWidth > 20.0) {
        throw new IllegalArgumentException(Float.toString(width));
    } else {
        width = userWidth;
    }
}

public float getWidth() {
    return width;

}

public void setLength(float userLength) {
    if (userLength < 0.0 || userLength > 20.0) {
        throw new IllegalArgumentException(Float.toString(length));
    } else {
        length = userLength;
    }
}

public float getLength() {
    return length;
}

public float calcArea() {
    return length * width;
}

public float calcPerimeter() {
    return length + length + width + width;
}

}

我的测试代码是

import java.util.Scanner;


public class RectangleTest {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input = new Scanner(System.in);

    System.out.println("Enter the width");
    float width = input.nextFloat();

    System.out.println("Enter the length");
    float length = input.nextFloat();

    Rectangle myRectangle = new Rectangle(width, length);

    System.out.printf("The area is: %.2f\n", myRectangle.calcArea());
    System.out.printf("The perimeter is: %.2f\n",
            myRectangle.calcPerimeter());

    input.close();

}

}

2 个答案:

答案 0 :(得分:2)

当您使用Rectangle(float, float)构造函数时,您不会使用mutator方法来执行验证。你可以做点什么

public Rectangle(float userWidth, float userLength) {
    // width = userWidth;
    // length = userLength;
    setWidth(userWidth);
    setLength(userLength);
}

会调用你的&#34; setter&#34;。此外,还有一个隐藏在

中的微妙(且唯一可能)的错误
input.close();

因为System.in是一个全局变量,如果您将代码提取到方法中(然后尝试从其他任何地方的System.in读取),您可能会遇到意外行为。

答案 1 :(得分:0)

你应该看看这里:

public Rectangle(float userWidth, float userLength) {
width = userWidth;
length = userLength;

}

已分配值而未进行验证。可以在构造函数中使用您的set方法。当您分配非法参数时,这将抛出异常。