一种全局方法,可以找到汽车的平均速度和最高速度

时间:2017-11-15 19:18:07

标签: c# global-methods

我使用属性和属性创建了Car类。在程序的主要部分,我创建了一系列汽车并初始化了这些值。

我的程序应该使用全局方法来查找所有汽车的最快车速和平均速度,该方法还必须返回两个结果。

我尝试制作这种方法,我制作了一个循环,它将单独通过每个速度并将其与连续的汽车总数分开,然后添加到变量平均值,这是否有意义?

为了找到连续跑得最快的车,我不知道怎么做,所以我问自己这个问题。

如果我在同一方法的定义中犯了错误,那么有人可以向我解释一下全局方法中的这种速度查找算法吗?一般来说也是关于整个任务的?

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},

        };

    }
}

3 个答案:

答案 0 :(得分: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( )

是的,原则上你可以在一个手写循环中完成所有操作,但代价是可读性/可维护性。

答案 1 :(得分:0)

虽然在这种情况下取​​每个速度除以10可以工作,但您可以考虑除以Car数组的长度而不是10(在下面的代码示例中完成)。要找到最大速度,只需将阵列中第一辆汽车的速度指定为最大速度,如果另一辆汽车速度更快,则更新它。

    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;
        }
    }

答案 2 :(得分:0)

你应该像这样简化你的课程:

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

要返回两个结果,您可以返回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);