C# 查找由该方法生成的数组中的最大数字
有一个面向乘客的类,包含C# 查找由该方法生成的数组中的最大数字,c#,arrays,methods,C#,Arrays,Methods,有一个面向乘客的类,包含字符串名称,整数,字符串作业等。我为这个类制作了一个数组,假设它有10个位置。 我想找到最年长的乘客 我的代码不起作用,因为无法将passenger[i]与整数进行比较。我的意思是我只需要乘客[] 如何在乘客[]中找到最旧的 编辑:返回值应为乘客的姓名和专业,而不仅仅是其年龄 public Passenger Oldest() { int oldest = 0; for (int i = 0; i < passengers.Length; i++
字符串名称
,整数
,字符串作业
等。我为这个类制作了一个数组,假设它有10个位置。
我想找到最年长的乘客
我的代码不起作用,因为无法将passenger[i]
与整数进行比较。我的意思是我只需要乘客[]
如何在乘客[]
中找到最旧的
编辑:返回值应为乘客的姓名
和专业
,而不仅仅是其年龄
public Passenger Oldest()
{
int oldest = 0;
for (int i = 0; i < passengers.Length; i++)
{
if (passengers[i] > oldest)
{
oldest = passengers[i];
}
}
return oldest;
}
class Passenger
{
int age;
string name;
string major;
public Passenger(int _age, string _name, string _major)
{
age = _age;
name = _name;
major = _major;
}
}
公共乘客信息()
{
int=0;
对于(int i=0;i年龄最大)
{
最年长的=乘客[i];
}
}
返回最老的;
}
头等舱乘客
{
智力年龄;
字符串名;
弦乐大调;
公共乘客(国际年龄、字符串名称、字符串专业)
{
年龄=_年龄;
名称=_名称;
专业=_专业;
}
}
首先,正如@Cid在问题注释中提到的,乘客
的所有字段都是专用的
(默认情况下,未指定修饰符时)。您应该将其标记为public
(以便在声明类之外访问它们),或者更好地创建公共属性:
class Passenger
{
public int Age { get; set; } // public auto property
public string Name { get; set; } // public auto property
public string Major { get; set; } // public auto property
public Passenger(int age, string name, string major)
{
Age = age;
Name = name;
Major = major;
}
}
其次,您需要比较乘客的年龄
(比例,而不是整个对象):
if (passengers[i].Age > oldest)
{
oldest = passengers[i].Age;
}
var oldest = passengers.Max(item => item.Age);
public Passenger Oldest()
{
// if no passengers -> return null
if (!passengers?.Any() ?? true)
{
return null;
}
var maxAge = passengers.Max(item => item.Age);
return passengers.First(item => item.Age == maxAge);
}
此外,您还可以使用LINQ
查找最年长的乘客:
if (passengers[i].Age > oldest)
{
oldest = passengers[i].Age;
}
var oldest = passengers.Max(item => item.Age);
public Passenger Oldest()
{
// if no passengers -> return null
if (!passengers?.Any() ?? true)
{
return null;
}
var maxAge = passengers.Max(item => item.Age);
return passengers.First(item => item.Age == maxAge);
}
最后,要返回最年长的乘客:
if (passengers[i].Age > oldest)
{
oldest = passengers[i].Age;
}
var oldest = passengers.Max(item => item.Age);
public Passenger Oldest()
{
// if no passengers -> return null
if (!passengers?.Any() ?? true)
{
return null;
}
var maxAge = passengers.Max(item => item.Age);
return passengers.First(item => item.Age == maxAge);
}
此外,如@DmitryBychenko所述,该方法可缩短为:
public Passenger Oldest()
{
// if no passengers -> return null
if (!passengers?.Any() ?? true)
{
return null;
}
return passengers.Aggregate((s, a) => s.Age > a.Age ? s : a);
}
或者不带LINQ
:
public Passenger Oldest()
{
// if no passengers -> return null
if (passengers == null || passengers.Length == 0)
{
return null;
}
var maxAge = passengers[0].Age;
var oldestPassengerIndex = 0;
for (var i = 1; i < passengers.Length; i++)
{
if (passengers[i].Age > maxAge)
{
oldest = passengers[i].Age;
oldestPassengerIndex = i;
}
}
return passengers[oldestPassengerIndex];
}
公共乘客信息()
{
//如果没有乘客->返回空
如果(乘客==null | |乘客.长度==0)
{
返回null;
}
var maxAge=乘客[0]。年龄;
var oldestPassengerIndex=0;
对于(变量i=1;i<乘客长度;i++)
{
if(乘客[i]。年龄>最大年龄)
{
高龄=乘客[i]。年龄;
oldestPassengerIndex=i;
}
}
返程乘客[旧乘客索引];
}
首先,正如@Cid在问题注释中提到的,乘客
的所有字段都是专用的
(默认情况下,未指定修饰符时)。您应该将其标记为public
(以便在声明类之外访问它们),或者更好地创建公共属性:
class Passenger
{
public int Age { get; set; } // public auto property
public string Name { get; set; } // public auto property
public string Major { get; set; } // public auto property
public Passenger(int age, string name, string major)
{
Age = age;
Name = name;
Major = major;
}
}
其次,您需要比较乘客的年龄
(比例,而不是整个对象):
if (passengers[i].Age > oldest)
{
oldest = passengers[i].Age;
}
var oldest = passengers.Max(item => item.Age);
public Passenger Oldest()
{
// if no passengers -> return null
if (!passengers?.Any() ?? true)
{
return null;
}
var maxAge = passengers.Max(item => item.Age);
return passengers.First(item => item.Age == maxAge);
}
此外,您还可以使用LINQ
查找最年长的乘客:
if (passengers[i].Age > oldest)
{
oldest = passengers[i].Age;
}
var oldest = passengers.Max(item => item.Age);
public Passenger Oldest()
{
// if no passengers -> return null
if (!passengers?.Any() ?? true)
{
return null;
}
var maxAge = passengers.Max(item => item.Age);
return passengers.First(item => item.Age == maxAge);
}
最后,要返回最年长的乘客:
if (passengers[i].Age > oldest)
{
oldest = passengers[i].Age;
}
var oldest = passengers.Max(item => item.Age);
public Passenger Oldest()
{
// if no passengers -> return null
if (!passengers?.Any() ?? true)
{
return null;
}
var maxAge = passengers.Max(item => item.Age);
return passengers.First(item => item.Age == maxAge);
}
此外,如@DmitryBychenko所述,该方法可缩短为:
public Passenger Oldest()
{
// if no passengers -> return null
if (!passengers?.Any() ?? true)
{
return null;
}
return passengers.Aggregate((s, a) => s.Age > a.Age ? s : a);
}
或者不带LINQ:
public Passenger Oldest()
{
// if no passengers -> return null
if (passengers == null || passengers.Length == 0)
{
return null;
}
var maxAge = passengers[0].Age;
var oldestPassengerIndex = 0;
for (var i = 1; i < passengers.Length; i++)
{
if (passengers[i].Age > maxAge)
{
oldest = passengers[i].Age;
oldestPassengerIndex = i;
}
}
return passengers[oldestPassengerIndex];
}
公共乘客信息()
{
//如果没有乘客->返回空
如果(乘客==null | |乘客.长度==0)
{
返回null;
}
var maxAge=乘客[0]。年龄;
var oldestPassengerIndex=0;
对于(变量i=1;i<乘客长度;i++)
{
if(乘客[i]。年龄>最大年龄)
{
高龄=乘客[i]。年龄;
oldestPassengerIndex=i;
}
}
返程乘客[旧乘客索引];
}
使用Linq很容易
var oldest=passengers.Max(x=>x.Age):
否则
Passenger oldest=new Passenger(0,"","");
foreach (Passenger p in Passengers){
if (p.age>oldest.age) oldest=p;
}
使用Linq很容易
var oldest=passengers.Max(x=>x.Age):
否则
Passenger oldest=new Passenger(0,"","");
foreach (Passenger p in Passengers){
if (p.age>oldest.age) oldest=p;
}
罗曼回答的效率略高一些,特别是如果最年长的乘客在列表中最后出现:
public Passenger Oldest()
{
if (passengers.Length == 1) return passengers[0];
var oldest = passengers[0];
for (int i = 1; i < passengers.Length; i++)
{
if (passengers[i].Age > oldest.Age) oldest = passengers[i];
}
return oldest;
}
公共乘客信息()
{
如果(乘客长度==1)返程乘客[0];
var=乘客[0];
对于(int i=1;ioldest.Age)oldest=乘客[i];
}
返回最老的;
}
这只需要一次迭代。罗曼回答的效率略高一些,特别是当最年长的乘客在列表中最后出现时:
public Passenger Oldest()
{
if (passengers.Length == 1) return passengers[0];
var oldest = passengers[0];
for (int i = 1; i < passengers.Length; i++)
{
if (passengers[i].Age > oldest.Age) oldest = passengers[i];
}
return oldest;
}
公共乘客信息()
{
如果(乘客长度==1)返程乘客[0];
var=乘客[0];
对于(int i=1;ioldest.Age)oldest=乘客[i];
}
返回最老的;
}
这只需要一次迭代。使用
乘客[i]。年龄用于最老的
和比较?^---另外要注意的是,最老的
是一个int
,但该方法希望返回类型乘客
,姓名
和主要
。您不能从类外访问它们Passenger
使用passengers[i]。年龄用于最老的和比较?^---另外要注意的是,最老的是一个int
,但该方法希望返回类型Passenger
,名称和主要的。您不能从舱外访问他们Passenger
Linq解决方案可以缩短为return passengers.Aggregate((s,a)=>s.Age>a.Age?s:a)如果我们将for
循环变成foreach
one:Passender oldest=null,那么不使用LInq方法的code>也可以缩短;foreach(乘客中的var p)如果(最旧==null | | p.Age>oldest.Age)最旧=p;返回最老的代码>Linq解决方案可以缩短为返程乘客。聚合((s,a)=>s.Age>a.Age?s:a)如果我们将for
循环变成foreach
one:Passender oldest=null,那么不使用LInq方法的code>也可以缩短;foreach(乘客中的var p)如果(最旧==null | | p.Age>oldest.Age)最旧=p;返回最老的代码>