Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找由该方法生成的数组中的最大数字_C#_Arrays_Methods - Fatal编程技术网

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;返回最老的