gpt4 book ai didi

c# - Compare() 方法,Parent 和 Children 对象排序不完美

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:17 25 4
gpt4 key购买 nike

我有这个作业。而我初学C#程序,现在学习C#和Java

作业: 编写获取 Drink[] 数组的静态方法,其中 AlcoholDrink 具有不同的酒精值。该方法返回一个包含三个最高酒精值的数组!如果数组中没有那么多 AlcoholDrink,则该方法返回空引用!

我试过写这个方法,但它不能正常工作......

因为 sz[1] = (AlcoholDrink)t[1]; 它是一个 Drink 对象(非酒精),我不明白为什么它在那里...

或者我的Compare方法不完美,可能有错误...我怎样才能瞄准,非AlcoholDrink对象(Drink Objects)到数组的末尾?

这是我的 C# 代码:

    class DrinkComparer : IComparer<Drink>
{
public int Compare(Drink x, Drink y)
{
// AlcoholDrink class is children of Drink class
if (x is AlcoholDrink && y is AlcoholDrink)
{
AlcoholDrink a = (AlcoholDrink)x;
AlcoholDrink b = (AlcoholDrink)y;
double aAlk = a.GetValueOfAlcohol;
double bAlk = b.GetValueOfAlcohol;
if (aAlk > bAlk)
return -1;
else if (aAlk < bAlk)
return 1;
else
return 0;
}
// Drink objects haven't got GetValueOfAlcohol method...
// How can I aim, the non AlcoholDrink objects (Drink objects) go to the end array?
else
return 1;
}
}
static AlcoholDrink[] Largest3AlcoholDrink(Drink[] t)
{
Array.Sort(t, new DrinkComparer());
AlcoholDrink[] sz = new AlcoholDrink[3];
sz[0] = (AlcoholDrink)t[0];
sz[1] = (AlcoholDrink)t[1];
sz[2] = (AlcoholDrink)t[2];
return sz;
}
AlcoholDrink sz = new AlcoholDrink( "Kékfrankos" , "0.75 l", 1500, 4.5);
Console.WriteLine(sz);

Drink[] t = new Drink[8];
t[0] = new AlcoholDrink("Kék Portói", "0.75 l", 1200, 20.5);
t[1] = new Drink("Tocsik", "0.75 l", 1100); // Non Alcohol Drink
t[2] = new AlcoholDrink("Tokaji Asszú", "0.75 l ", 1600, 14.5);
t[3] = new AlcoholDrink("Egri Bikavér", "0.75 l", 1500, 23.5);
t[4] = new Drink("Egri Szamóca", "0.75 l", 1100); // Non Alchol Drink
t[5] = new AlcoholDrink("Egri Merlot", "0.75 l", 1700, 18.5);
t[6] = new AlcoholDrink("Egri Medina", "0.75 l", 900, 16.5);
t[7] = new AlcoholDrink("Törley Talisman", "0.75 l", 750, 4.5);
Console.WriteLine(DrinkKeres( t, "Egri Bikavér"));

Largest3AlcoholDrink(t);

Console.ReadLine();

最佳答案

问题在这里:

        // Drink objects haven't got GetValueOfAlcohol method...
// How can I aim, the non AlcoholDrink objects (Drink objects) go to the end array?
else
return 1;

您希望非酒精饮料走到最后,但即使其中一种饮料是酒精饮料,这也会返回 1。这样做:

else if (x is AlcoholicDrink) return -1;
else if (y is AlcoholicDrink) return 1;
else return 0;

关于c# - Compare() 方法,Parent 和 Children 对象排序不完美,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8023129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com