我有一个包含多个属性的Person。此类的多个实例位于数组PersonList中。
是否可以比较数组中对象的不同实例的属性?
例如:找出谁是最老的,谁是最年轻的?
public class Persoon
{
public Persoon()
{
}
//Properties maken
public Persoon(string naam, Int16 gewicht, Int16 lengte, DateTime geboortedatum)
{
this.Naam = naam;
this.Gewicht = gewicht;
this.Lengte = lengte;
this.Geboortedatum = geboortedatum;
}
public string Naam { get; set; } // AutoProperty
public double Gewicht { get; set; } // AutoProperty
public int Lengte { get; set; } // AutoProperty
public DateTime Geboortedatum { get; set; } // AutoProperty
public double BerekenBmi()
{
//BMI formule: Gewicht in kilogram / (Lengte in meter * Lengte in meter)
return Math.Round(Gewicht/((Lengte/100.0) * (Lengte/100.0)),1);
}
public string BmiStadiumBerekenen()
{
if (BerekenBmi() < 18.5) return "ondergewicht";
if (BerekenBmi() >= 18.5 && BerekenBmi() <= 24.9) return "normaal";
if (BerekenBmi() >= 25 && BerekenBmi() <= 29.9) return "overgewicht";
if (BerekenBmi() >= 30 && BerekenBmi() <= 34.9) return "obesitas I";
if (BerekenBmi() >= 35 && BerekenBmi() <= 39.9) return "obesitas II";
else return "morbide obesitas";
}
public int BerekenLeeftijd()
{
TimeSpan leeftijd = DateTime.Today - Geboortedatum;
return (int) leeftijd.TotalDays;
}
}
我需要比较最年长和最年轻的人,这样我才能计算出他们之间的时间。我之前只有2个没有阵列的人做过这个,但现在我需要用它们来做
答案 0 :(得分:0)
可能是这样的(使用Linq):
var youngest = personList.OrderBy(p => p.Age).First();
(注意这假设你的列表中有一些东西可以开始)。
答案 1 :(得分:0)
当然可以,解决方案就在您的问题中!您必须使用compareTo()方法。 您必须在Person类中实现compareTo()方法。
public class Person implements Comparable<Person>{...}
然后你只需添加方法
@Override
public int compareTo(Person p) {...}
此方法需要参数中的另一个Person对象,因此您可以选择比较人物的方式。例如,你说你要比较每个Person的年龄,你只需要在compareTo()方法中放入一个if close语句。
int result;
if (this.age < p.getAge()) {
esito = -1;
}
else if(this.age = p.getAge()){
esito = 0;
}
else{
esito = 1;
}
return esito;
此方法返回一个int数:负整数,零或正整数,因为此对象小于,等于或大于指定对象。
来源:
http://docs.oracle.com/javase/7/docs/api/
学校课程
:)