>我创建了具有属性和属性的 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},
};
}
}
虽然在这种情况下将每个速度除以 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;
}
}
除非性能至关重要,否则可以执行多个步骤:
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( )
是的,原则上您可以在一个手写循环中完成所有操作,但要以可读性/可维护性为代价。
你应该像这样简化你的类:
public class Car {
public string Name { get; set; }
public double Price { get; set; }
public double Speed { get; set; }
}
若要返回两个结果,可以返回Tuple
或通过引用传递参数。
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);