Публичный класс квадрат 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;
}
Внутри метода экземпляра или конструктора,
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;
}