我试图从5个对象的三个整数中获得最大的值,该代码可以正常工作,但看起来有点笨拙且效率低下,我有什么方法可以改进它?是否可以在不使用数组的情况下结合一种方法getLargest
来计算最大,最小和平均值?
class Calc
{
private int num1, num2, num3, Ans;
public int ans { get { return Ans; } set { Ans = value; } }
public int Num1 { get { return num1; } set { num1 = value; } }
public int Num2 { get { return num2; } set { num2 = value; } }
public int Num3 { get { return num3; } set { num3 = value; } }
public void getLargest(int x, int y, int z)
{
ans=(Math.Max(Math.Max(x, y), z));
}
}
答案 0 :(得分:2)
从技术上讲,您可以将其缩小很多...
public class Calc
{
public int Max => Math.Max(Math.Max(Num1, Num2), Num3);
public int Min => Math.Min(Math.Min(Num1, Num2), Num3);
public int Avg => (Num1 + Num2 + Num3) / 3;
public int Num1 { get; set; }
public int Num2 { get; set; }
public int Num3 { get; set; }
}
(这需要在顶部using System.Linq;
)
这是创建自动属性(无主体的属性),该属性将自动为您创建后备字段。
从技术上讲,这会效率更低一些,因为每次都会计算它们,因此您要做的是这样:
public class Calc
{
public int Num1 { get; private set; }
public int Num2 { get; private set; }
public int Num3 { get; private set; }
public int Max { get; private set; }
public int Min { get; private set; }
public int Avg { get; private set; }
public Calc(int num1, int num2, int num3)
{
Num1 = num1;
Num2 = num2;
Num3 = num3;
Max = Math.Max(Math.Max(Num1, Num2), Num3);
Min = Math.Min(Math.Min(Num1, Num2), Num3);
Avg = (Num1 + Num2 + Num3) / 3;
}
}
(构造此对象的方法有很多,上面只是一种易于理解的方法)。这会将结果“缓存”在一个不变的对象中(这是您要学习的东西)。
答案 1 :(得分:0)
正如您所指定的,不使用数组,我想这是“清洁器”的最佳选择,尽管我怀疑这会带来明显的速度改进,是否有您不想使用数组的原因?该课程的目的是什么?
class Calc
{
public int ans { get; set; }
public int Num1 { get; set; }
public int Num2 { get; set; }
public int Num3 { get; set; }
public void getLargest(int x, int y, int z)
{
ans = Math.Max(Math.Max(x, y), z);
}
}