我处于面向对象的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);
}
}
答案 0 :(得分:3)
由于这显然是一个家庭作业问题,所以我不会在答案中张贴完整的代码-因为如果我为您编写代码,您将不会从中学习任何东西。
相反,我将用语言来解释您在课堂上做错了什么以及应该如何解决。
形状的周长和面积取决于形状的大小-矩形的宽度和长度或圆的半径。
因此,一旦大小改变就进行计算是有意义的。
通常,您将使用公共只读属性来获取周长和面积-完成后,您可以选择是否要在属性获取器中计算它们,这意味着每次有人调用它们时,或者是否需要在设置大小值时进行计算-也应通过属性来完成。
该选择应取决于大小变化的频率与周长和区域使用的频率之间的关系-对于家庭作业,这两个选项都应该足够好。
所以您要做的是这样(在矩形中):
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;}