setheight () не меняет переменную - PullRequest
1 голос
/ 08 января 2020

Я перехожу 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());**
    }
}

Ответы [ 3 ]

0 голосов
/ 08 января 2020
  public void setHeight(double height) {
        System.out.println("got here ");
        if((this.height)<0){
            this.height =  0.00;
        }
        else{
          this.height = height;
        } 
    }
0 голосов
/ 08 января 2020

Чтобы исправить ваш метод setHeight() с вводом «-1,5», сделайте следующее:

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(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
    }
}

Путаница, с которой вы столкнулись, заключается в том, когда использовать height вместо this.height. Один из них представляет значение параметра, передаваемого в метод (height), а другой представляет значение, уже сохраненное в объекте (this.height).

Кроме того, если вы используете IDE (например, как IntelliJ), вы увидите серое имя переменной height вместе с текстом при наведении «Параметр height никогда не используется» , что даст вам подсказку, что в вашем коде есть ошибка программирования.

0 голосов
/ 08 января 2020

Вот почему я всегда предлагаю передавать переменную с именем, отличным от переменной, которую вы устанавливаете. Вы проверяете, если this.height <0 ... естественно, это будет то, что вы установили в конструкторе. </p>

this.height будет ссылаться на переменную height вашего объекта Wall, не height, который передается в установщик.

Попробуйте это:

public void setHeight(double h) {
  if(h < 0) {
    this.height =  0.00;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...