2017-11-15 20 views
0

属性とプロパティを持つCarクラスを作成しました。プログラムの主要部分では、一連の車を作成し、値を初期化しました。車の平均速度と最高速度を検出するグローバルな方法

私のプログラムは、すべての車の中で最速の車と平均速度を見つけるために、グローバルメソッドを使用する必要があり、この方法は、2つの結果を返す必要があります。

私は個別にすべての速度を通過するループのために作られ、行における自動車の総数でそれを分割し、その後、変数の平均に加え、このメイクセンスを行い、この方法を行うことを試みましたか?行で最速の車を見つけるために

、私はそれを行う方法がわからないので、私は自分自身に質問をしました。私は同じメソッドの定義でミスを犯した場合

誰もが全体のタスクについては、一般的にも世界的な方法でこの速度発見アルゴリズムについて私に説明し、することはできますか?

class Car 
{ 
    private string name; 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    private int price; 

    public int Price 
    { 
     get { return price; } 
     set { price = value; } 
    } 

    private float speed; 

    public float Speed 
    { 
     get { return speed; } 
     set { speed = value; } 
    }  
} 

これは、パフォーマンスが重要でない限り、それを複数のステップを実行することは結構ですメインプログラム

class Program 
{ 
    public static void MaxSpeedCarAverage(Car[] arraycar,float Maxspeed,float average) 
    {     
     for(int i=0;i<10;i++) 
     { 
      average+= arraycar[i].Speed/10; 
     } 
    } 

    static void Main(string[] args) 
    { 
     Car[] car = new Car[10] 
     { 
      new Car(){Name="Bmw",Price=5888,Speed=290 },  //initialisation of array// 
      new Car(){Name="Mercedes",Price=7544,Speed=300}, 
      new Car(){Name="Peugeot",Price=4500,Speed=190}, 
      new Car(){Name="Renault",Price=6784,Speed=210}, 
      new Car(){Name="Fiat",Price=3221,Speed=180}, 
      new Car(){Name="Audi",Price=4500,Speed=240}, 
      new Car(){Name="Golf",Price=4500,Speed=255}, 
      new Car(){Name="Sab",Price=4500,Speed=332}, 
      new Car(){Name="Range Rover",Price=4500,Speed=340}, 
      new Car(){Name="Honda",Price=4500,Speed=267}, 

     }; 

    } 
} 

答えて

0

は、各速度を取り、この場合には10本の作品で割るのに、あなたは(以下のサンプルコードで実行)の代わりに10の車の列の長さで割る検討することができます。最高速度を見つけるには、配列の最初の車の速度を最高速度に割り当て、別のCarが速くなるとそれを更新するだけです。

public static void MaxSpeedCarAverage(Car[] arraycar, float maxspeed, float average) 
    { 
     maxspeed = arraycar[0].Speed; 
     for(int i=0;i<10;i++) 
     { 
      if(arraycar[i].Speed > maxspeed) { 
       maxspeed = arraycar[i].Speed; 
      } 
      average+= arraycar[i].Speed/arraycar.Length; 
     } 
    } 
+0

これは私が探していたものですが、私は似たようだったと私はそれを考え出したが、私はそれを実現しませんでした、ありがとう!アドバイスを – Mark0n1

0

です:

a) find the maximum speed (hint: you can use .Select(..) and .Max() from System.Linq) 
b) then find the car (s) that have that speed (.Where(...)) 
c) calculating the average can likewise been done using .Select() and .Average() 

はい、原則的に、あなたは片手でそれをすべて行うことができます書き込み可能なループですが、可読性/保守性を犠牲にしています。

0

あなたはこのようなあなたのクラスを簡素化する必要があります

public class Car { 
    public string Name { get; set; } 
    public double Price { get; set; } 
    public double Speed { get; set; } 
} 

は、2つの結果を返すには、あなたがTupleを返すか、あなたのparameters by referenceを渡すことができます。このような

public static void GetMaxAndAverageFromCars(IEnumerable<Car> cars, ref double maxSpeed, ref double avgSpeed) { 
    maxSpeed = cars.Max(c => c.Speed); 
    avgSpeed = cars.Average(c => c.Speed); 
} 

用途:

using System.Linq; 

var cars = new Car[] 
{ 
    // .. 
}; 

double maxSpeed = 0.0; 
double avgSpeed = 0.0; 

GetMaxAndAverageFromCars(cars, ref maxSpeed, ref avgSpeed); 
+0

おかげで、あなたのコードは私のコードよりもはるかに読みやすい見え、私の経験が少し多すぎるだけのために、短縮されます、私は図書館のような非常に明確ではないよ、いくつかの事実を通過する必要がありますsystem.linqとIEnumerableは何ですか?しかし、このアドバイスはとても良いことです。それはさらに進歩を助けてくれるでしょう – Mark0n1

+0

@ Mark0n1 LINQは素晴らしいです...それは '.Where'、'のような非常に便利な関数を持つライブラリです。 「選択」と「結合」を使用してデータを操作することができます。 'IEnumerable'は何でも実装できるインターフェースです...初心者のために、' IEnumerable' ==>の場合、 'foreach'を行うことができます。配列はIEnumerableなのでリストも...インターフェースを使う利点は、配列やリストの場合でもメソッドが気にしないということです:これを行うことができます: 'GetAverage(myArray)'と 'GetAverage (myList) 'と呼びます。 – Kyle

+0

今日、私はそのライブラリについて考えましたが、少し研究してきましたが、それは非常に優れた機能を持っています。誰かがそれを使って作業することを知っているときは、あなたの仕事をする方が簡単だと思います。私はまたそれがIEnumerableであることに気づいたインターフェイスですが、私はちょうどそれについて議論する必要があります、代理人、例外...もう一度ありがとう! – Mark0n1

関連する問題