Есть несколько изменений, которые я бы порекомендовал, чтобы помочь вам получить желаемое поведение.
Во-первых, я бы рекомендовал не вызывать методы, которые изменяют состояние вашего класса в установщике или получателе свойств, как это обычно бывает.приводит к трудностям в рассуждении с помощью кода.
Я бы также рекомендовал изменить две функции, чтобы они возвращали желаемое значение, вместо того, чтобы заставлять их изменять состояние поля, и позволить свойствам просто возвращать эти значения.
Что касается вашей непосредственной проблемы, то эта проблема связана с вашим методом CalcGallonsOfPaint.
while (wallArea > 0)
{
x++;
wallArea = wallArea - wallArea; // <- right here
numberOfGallonsOfPaintNeeded = x;
}
Эта часть вычисления всегда будет устанавливать площадь стены равной 0, поскольку она вычитает ее полное значение из себя.Я подозреваю, что вы хотите вычесть значение 350, но вы также меняете значение поля, которое используется для возврата WallArea.По крайней мере, вы должны назначить wallArea временной переменной и вычесть ее.
Тем не менее, вероятно, лучше покончить с тем, как на состояние объекта влияют вызовы этих свойств и методов.
Для этого я бы соответствующим образом скорректировал класс вашей комнаты:
class Room
{
public int Length {get;set;}
public int Width {get;set;}
public int Height {get;set;}
public int WallArea
{
get {return CalcWallArea();}
}
public int GallonsOfPaint
{
get {return CalcGallonsOfPaint();}
}
private int CalcWallArea()
{
// I am assuming this calculation is correct for your needs.
return (Length + Width + Length + Width) * Height;
}
private int CalcAmountOfPaint()
{
var area = WallArea;
if (area <= 350)
return 1;
int x = 0;
while (area > 0)
{
x++;
area -= 350;
}
return x;
}
}