Java setheight()不更改变量

Java setheight()不更改变量,java,syntax,Java,Syntax,我正在复习Java教程,我被卡住了。 当我执行wall.setHeight(-1.5)时 它返回我4而不是0的高度。 谁能告诉我我的语法有什么问题吗 public class Wall { private double width; private double height; public Wall(){ System.out.println("Empty"); } public Wall(double width, double

我正在复习Java教程,我被卡住了。 当我执行wall.setHeight(-1.5)时 它返回我4而不是0的高度。 谁能告诉我我的语法有什么问题吗

public class Wall {
    private double width;
    private double height;

    public Wall(){
        System.out.println("Empty");

    }

    public Wall(double width, double height) {
        this.width = width;
        this.height = height;
        System.out.println("width=" + this.width + "height=" + this.height);
    }

    public void setWidth(double width) {
        if((this.width)<0){
            this.width =  0.00;
        }
    }

    public void setHeight(double height) {
        System.out.println("got here ");
        if((this.height)<0){
            this.height =  0.00;
        }
    }

    public double getWidth() {
        return width;
    }

    public double getHeight() {
        return height;
    }

    public double getArea(){
        return (this.width) * (this.height);
    }
}

public class main {
    public static void main(String[] args) {
        Wall wall = new Wall(5,4);
        System.out.println("area= " + wall.getArea());
        wall.setHeight(-1.5);
        System.out.println(wall.getHeight());
        System.out.println("width= " + wall.getWidth());
        System.out.println("height= " + wall.getHeight());
        System.out.println("area= " + wall.getArea());**
    }
}
公共类墙{
私人双宽度;
私人双高;
公共墙(){
System.out.println(“空”);
}
公共墙(双宽双高){
这个。宽度=宽度;
高度=高度;
System.out.println(“width=“+this.width+”height=“+this.height”);
}
公共空白设置宽度(双倍宽度){

if((this.width)这就是为什么我总是建议传入一个与您正在设置的变量名称不同的变量。您正在检查this.height是否为
<0…当然,它将是您在构造函数中设置的任何名称

此.height
将引用墙对象的变量
height
,而不是传递给setter的
height

试试这个:

public void setHeight(double h) {
  if(h < 0) {
    this.height =  0.00;
  }
}
public void setHeight(双h){
if(h<0){
该高度=0.00;
}
}
公共空间设置高度(双倍高度){
System.out.println(“到达这里”);

如果((this.height)要用“-1.5”的输入修复
setHeight()
方法,请执行以下操作:

public void setHeight(double height) {
    System.out.println("got here ");
    if (height < 0) {        // use "height" instead of "this.height"
        this.height = 0.00;
    }
}
public void setHeight(双倍高度){
System.out.println(“到达这里”);
如果(高度<0){//请使用“高度”而不是“this.height”
该高度=0.00;
}
}
要修复它,以便它还保存其他零或更大的值,请执行此操作

public void setHeight(double height) {
    System.out.println("got here ");
    if (height < 0) {
        this.height = 0.00;
    } else {
        this.height = height;   // set a new value for "this.height" if you didn't zero it out above
    }
}
public void setHeight(双倍高度){
System.out.println(“到达这里”);
如果(高度<0){
该高度=0.00;
}否则{
this.height=height;//如果没有在上面将其归零,请为“this.height”设置一个新值
}
}
您遇到的困惑是何时使用
height
而不是
this.height
。其中一个表示传递到方法中的参数值(
height
),另一个表示已存储在对象上的值(
this.height


此外,如果您使用IDE(如IntelliJ),您会看到“高度”变量名与悬停文本“参数“高度”永远不会使用”一起变灰这将提示您的代码中存在编程错误。

您没有在相应的setter中设置
宽度
高度
。setter中的
if
语句阻止设置高度值<0。。。
public void setHeight(double height) {
    System.out.println("got here ");
    if (height < 0) {
        this.height = 0.00;
    } else {
        this.height = height;   // set a new value for "this.height" if you didn't zero it out above
    }
}