我必须找到卡路里含量最高的产品。 我的程序知道用卡路里打印所有产品,现在我正在研究如何只打印数量最多的产品。
我有我的班级食物:
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();
}
}
}
对不起,如果你不了解很多东西,但首先我想在这里放一些东西,但后来我觉得你什么都不懂。重要的是我不要&# 39;不知道如何验证所有产品,例如,如果我有第一个f,它有nr卡路里= 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;
}
答案 0 :(得分:1)
为了打印具有最高卡路里的产品,您需要在处理新产品实例时以某种方式跟踪该产品。
我建议您查询每个实例并维护对具有最高卡路里值的实例的引用。例如:
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
中的内容正在进行中。您似乎不太可能直接在主方法中直接硬编码一堆实例,更可能是您将接收它们或在外部构建它们然后从<生成输出 / em>那个集合。因此,您可以使用上面的代码获取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;
}