#c#
#c#
Вопрос:
Я нахожусь в классе, ориентированном на c #, и у меня есть эти два простых класса, но выходные данные для периметра и области продолжают выводиться равными нулю, я попробовал два разных способа и не могу понять, вероятно, это легко исправить, любая помощь была бы оценена, спасибо!
class Rectangle {
int width;
int length;
public int perimeter;
public int area;
public Rectangle()
{
width = 1;
length = 1;
}
public Rectangle(int w, int l)
{
set_values(w, l);
}
public void set_values(int w, int l)
{
width = w;
length = l;
}
public Rectangle get_values()
{
return this;
}
public void calc_perimeter(int width, int length)
{
perimeter = 2 * width 2 * length;
}
public void calc_area(int width, int length)
{
area = width * length;
}
public void display_values()
{
Console.WriteLine("Width is {0}, and Lenght is {1}", width, length);
}
public void display_perimeter()
{
Console.WriteLine("The perimeter of the rectangle is {0}", perimeter);
}
public void display_area()
{
Console.WriteLine("The area of the rectangle is {0}", area);
}
}
class Circle
{
double radius;
public double perimeter;
public double area;
public Circle()
{
radius = 1;
}
public Circle(double r)
{
set_values(r);
}
public void set_values(double r)
{
radius = r;
}
public Circle get_values()
{
return this;
}
public double calc_perimeter(double radius)
{
perimeter = 2*Math.PI*radius;
return perimeter;
}
public double calc_area(double radius)
{
area = Math.PI*radius*radius;
return area;
}
public void display_values()
{
Console.WriteLine("Radius is {0}", radius);
}
public void display_perimeter()
{
Console.WriteLine("The perimeter of the cirlce is {0}", perimeter);
}
public void display_area()
{
Console.WriteLine("The area of the circle is {0}", area);
}
}
Комментарии:
1. Не могли бы вы показать код, который вызывает эти классы?
2. Вы сначала вызывали calc_perimeter?
3. Обратите внимание, что для обоих классов методы calc_area и calc_perimeter, вероятно, не должны иметь параметров — тогда они будут вычислять значения для значений, установленных в полях экземпляров класса.
Ответ №1:
Поскольку это явно вопрос домашнего задания, я не собираюсь публиковать полный код в ответе — потому что, если я напишу код для вас, вы ничему из него не научитесь.
Вместо этого я собираюсь объяснить на словах, что вы сделали неправильно в своих классах и как вы должны это исправить.
Периметр и площадь фигуры зависят от размера фигуры — ширины и длины прямоугольника или радиуса окружности.
Поэтому имеет смысл вычислить его, как только размер изменится.
Обычно вы используете общедоступные свойства, доступные только для чтения, чтобы получить периметр и площадь — как только вы это сделаете, у вас будет выбор, хотите ли вы вычислять их внутри средства получения свойств, то есть каждый раз, когда кто-то их вызывает, или вы хотите вычислять их при установке значений размера — что также следует выполнять через свойства.
Этот выбор должен зависеть от частоты изменения размера в зависимости от частоты использования периметра и области — для домашнего задания оба варианта должны быть достаточно хорошими.
Итак, что вы делаете, это что-то вроде этого (в прямоугольнике):
private int width;
public int Width
{
get {return width;}
set {width = value; SetSize();}
}
private int height;
public int Height
{
get {return height;}
set {height = value, SetSize();}
}
// be sure to also call this method in the constructors!
private void SetSize()
{
// calculate perimeter and area in here.
}
public int Perimeter {get; private set;}
public int Area {get; private set;}