Java自定义Rectangle类输入参数未生效始终使用默认值问题求助
问题原因分析
- 实例对象使用错误:你在main方法中创建了
len、wid、a三个完全独立的Rectangle实例,给len设置长度、给wid设置宽度的操作完全不会影响a的属性值,最后调用a.computeArea()自然只能拿到默认值1*1的计算结果。 - 核心方法逻辑错误:
- 面积计算方法
computeArea错用了Math.pow()求幂方法,矩形面积计算公式是长度*宽度,不是「长度的宽度次方」 - 周长计算方法
computePerimeter漏了乘2,矩形周长公式是2*(长度+宽度),不是只有长度加宽度的和
- 面积计算方法
修正后的代码
Rectangle.java
package geometry; // file name Rectangle.java /** * * @author 12484 */ public class Rectangle { // 实例属性 private double myWidth; private double myLength; // 无参构造:使用默认长宽1 public Rectangle() { myWidth = 1; myLength = 1; } // 带参构造:传入自定义长宽 public Rectangle (double width, double length) { myWidth = width; myLength = length; } // 访问方法 public double getWidth() { return myWidth; } public double getLength() { return myLength; } // 修改方法 public void setWidth(double width) { myWidth = width; } public void setLength(double length) { myLength = length; } // 计算面积 public double computeArea() { return getLength() * getWidth(); } // 计算周长 public double computePerimeter() { return 2 * (getLength() + getWidth()); } }
Rectest.java
package geometry; // filename Rectest.java public class Rectest { public static void main(String[]args){ // 方式1:无参构造使用默认值,之后手动修改属性 Rectangle rect1 = new Rectangle(); System.out.println("rect1默认面积:" + rect1.computeArea()); // 输出1.0 // 对同一个实例修改长宽 rect1.setLength(5.2); rect1.setWidth(7.5); System.out.println("rect1修改后面积:" + rect1.computeArea()); // 输出39.0 // 方式2:直接调用带参构造传入自定义值 Rectangle rect2 = new Rectangle(3,4); System.out.println("rect2自定义面积:" + rect2.computeArea()); // 输出12.0 System.out.println("rect2自定义周长:" + rect2.computePerimeter()); // 输出14.0 } }
使用说明
- 不需要自定义长宽时,直接调用无参构造
new Rectangle()就会自动使用默认值1作为长宽 - 需要自定义长宽时,两种方式都可实现:要么创建实例时直接调用带参构造传入数值,要么创建无参实例后调用
setWidth、setLength方法修改同一个实例的属性即可
内容的提问来源于stack exchange,提问作者LazersFixAll
相关产品推荐
相关产品推荐

