この宿題があります。そして、私は初心者の C# プログラムで、現在 C# と Java を学んでいます
宿題: Drink[] 配列を取得する静的メソッドを作成します。ここで、AlcoholDrink は異なるアルコール値を持っています。このメソッドは、アルコールの最高値 3 つを含む配列を返します。配列内のアルコール飲料がそれほど多くない場合、メソッドは null 参照を返しています!
このメソッドを書いてみましたが、正しく動作しません...
sz[1] = (AlcoholDrink)t[1];での原因 それは飲み物のオブジェクト (ノンアルコール) です。なぜそこにあるのかわかりません...
または、Compare メソッドが完全ではないか、間違いがある可能性があります...どのように目指すことができますか?
ここに私の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();