好的,这是功课。我不能为我的生活找出我在这里做错了什么。从书中可以看出,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();
}
}
答案 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方法。当您分配非法参数时,这将抛出异常。