方法找出热量最高的产品c#
本文关键字:方法 | 更新日期: 2023-09-27 18:20:10
我必须找到热量最高的产品。我的程序知道打印所有含有卡路里的产品,现在我正在研究如何只打印数字最高的产品。
我有我的课食物:
class Food : Product{
private NutritionalData nutritionalData;
private DateTime expirationTerm;
public FoodCategory Category;
public Food(int ProductId, string SKU, string Name, decimal Price, string Description, string Producer,
NutritionalData nutritionalData, FoodCategory Category, DateTime expirationTerm)
: base(ProductId, SKU, Name, Price, Description, Producer)
{
this.nutritionalData = nutritionalData;
this.Category = Category;
this.expirationTerm = expirationTerm;
}
public Food() { }
public NutritionalData GetNutritionalData()
{
return nutritionalData;
}
public int GetCalories()
{
return nutritionalData.Calories;
}
public override void PrintCalories()
{
int i = this.GetCalories();
Console.WriteLine("Product: {0}, Calories: {1},ProductId: {2}", this.GetName(), i, this.GetProductId());
}
}
//这里我有一些类和一些结构,但与我的想法无关,所以我不把所有的东西都放在这里。主要内容如下:
class Program
{
static void Main(string[] args)
{
Product f = new Food(1, "a", "Food", 15, "Good Quality", "Sana",new NutritionalData(2,12,1,3,2) //(2=calories,12=,1,3,2=doens't matter,
FoodCategory.Meat, new DateTime(2015,4,12));
Product f1 = new Food(2, "v", "Pizza1", 2, "Bad Quality", "Ariel", new NutritionalData(8, 17, 5, 3, 2),
FoodCategory.Meat, new DateTime(2015, 4, 11));
f.PrintCalories();
f1.PrintCalories();
}
}
}
很抱歉,如果你不理解很多东西,但首先我只想在这里放一些东西,但后来我认为你不会什么都不理解。重要的是,我不知道如何验证所有的产品,例如,如果我有第一个f,它的卡路里数为2,如果下面的产品的卡路里数大于或小于这个,我该如何验证,以此类推?使用GetCalories方法,我会将热量退还给产品,但现在我被卡住了。一些想法?如果你不明白我想做什么,请告诉我。谢谢。
更新:我尝试了一些东西,但没有结果:
public override void PrintCalories()
{
int max = 0;
int i = this.GetCalories();
if (i > max)
{
Console.WriteLine("Product: {0}, Calories: {1},ProductId: {2}", this.GetName(), i, this.GetProductId());
}
else
Console.WriteLine("Product: {0}, Calories: {1},ProductId: {2}", this.GetName(), max, this.GetProductId());
max = i;
}
为了打印热量最高的产品,在处理新产品实例时,您需要以某种方式跟踪热量。
我建议你询问每个实例,并保留对卡路里值最高的实例的引用。例如:
var highestCaloriesSoFar = f; // store your first instance since you haven't seen any others yet.
// --- whatever code you ultimately have in between getting each instance.
if (nextInstance.NutritionData.Calories > highestCaloriesSoFar.NutritionData.Calories)
highestCaloriesSoFar = nextInstance;
然后你可以在最后打印这个实例。
现在,我这么说并没有真正知道你最终将如何编码,因为看起来你的Main
中有一项工作正在进行中。您似乎不太可能直接在主方法中硬编码一堆实例,更有可能接收它们或从外部构建它们,然后从该集合中生成输出。因此,您可以使用上面的代码来获得一个Food
实例的集合,并返回热量最高的实例:
private static Food GetHighestCalories(IEnumerable<Food> fromCollection)
{
Food highestCaloriesSoFar = null;
foreach (Food nextInstance in fromCollection)
{
if(highestCaloriesSoFar != null)
{
if (nextInstance.NutritionData.Calories > highestCaloriesSoFar.NutritionData.Calories)
highestCaloriesSoFar = nextInstance;
}
else // first loop iter.
{
highestCaloriesSoFar = nextInstance;
}
}
return highestCaloriesSoFar;
}