Публичный класс квадрат Java возвращает во всех "0"

Есть класс под названием Квадрат

public class Square
{
private double side;

public Square(double side)
{
    side = side;
}

public double getSide()
{
    return side;
}

public void setSide(double s)
{
    side = s;
}

public double getArea()
{
    return side * side;
}

public double getPerimeter()
{
    return side * 4;
}

Другая программа объявила квадрат и передала значение 4,0 конструктору. Затем он использовал методы класса для печати длины стороны, площади и периметра объекта Square. Ниже приведено то, что выпускается программой.

длина стороны: 0.0 площадь: 0.0 периметр: 0.0

Я думаю, что проблема заключается в "частной двойной стороне"; линия. Но я не уверен. Любые другие лакомые кусочки, которые люди могут добавить?

3 ответа

В конструкторе параметр side будет локальной переменной. Если вы хотите сослаться на переменную экземпляра side, использовать thisключевое слово:

public Square(double side)
{
    this.side = side;
}

Из учебников по Java:

Внутри метода экземпляра или конструктора, this является ссылкой на текущий объект - объект, чей метод или конструктор вызывается....

Вы должны сделать это так

public Square(double side) {
    this.side = side;
}

В вашем коде сторона = сторона просто назначает сторону для себя. Поскольку по умолчанию он равен нулю, он просто присваивает себе ноль.

В конструкторе side создается как приватная переменная. Чтобы получить доступ к переменной "side" в классе, вы должны использовать this.side. "this" относится к экземпляру класса, поэтому "this.side" сообщает коду об изменении стороны переменной, которая является переменной Square.

Другие ответы верны. Вы должны использовать this.side = side, хотя ваш код будет более разборчивым, если вы переименуете одну из двух. Либо параметр, либо внутреннее значение. Вот как вы могли бы сделать это и сделать код проще для чтения:

public class Square
{
private double side;

public Square(double aSide)
{
    side = aSide; // in here it is obvious which one is the parameter and which one is the private variable
}

public double getSide()
{
    return side;
}

public void setSide(double s)
{
    side = s;
}

public double getArea()
{
    return side * side;
}

public double getPerimeter()
{
    return side * 4;
}
Другие вопросы по тегам