我有这样的方法static List<int> Compare(List<int> a, List<int> b)
我希望此功能对return [aPoints bPoints]
类似[2 1]
但是,我坚持使用if
语句在循环后存储值,并将其放入得分。
我尝试了这个:
static List<int> Compare(List<int> a, List<int> b)
{
int aPoints = 0;
int bPoints = 0;
List<int> score = new List<int>() { aPoints, bPoints };
for (int i = 0; i < 3; i++)
{
if (a[i] > b[i])
{
aPoints++;
}
else if (a[i] < b[i])
{
bPoints++;
}
}
return score;
}
并将它们打印在:
static void Main(string[] args){}
最佳答案
这是一个非常简单的解决方案。只需创建一个空列表,并在返回呼叫者之前在其中添加aPoints
和bPoints
。
static List<int> Compare(List<int> a, List<int> b)
{
int aPoints = 0;
int bPoints = 0;
List<int> score = new List<int>();
for (int i = 0; i < 3; i++)
{
if (a[i] > b[i])
{
aPoints++;
}
else if (a[i] < b[i])
{
bPoints++;
}
}
score.Add(aPoints);
score.Add(bPoints);
return score;
或者,您可以像这样直接在
return
上创建列表:static List<int> Compare(List<int> a, List<int> b)
{
int aPoints = 0;
int bPoints = 0;
for (int i = 0; i < 3; i++)
{
if (a[i] > b[i])
{
aPoints++;
}
else if (a[i] < b[i])
{
bPoints++;
}
}
return new List<int>() { aPoints, bPoints};
另外,由于列表始终具有2个值,因此您可以使用语义上更正确的方法。使用tuple:
static (int aPoints, int bPoints) Compare(List<int> a, List<int> b)
{
int aPoints = 0;
int bPoints = 0;
for (int i = 0; i < 3; i++)
{
if (a[i] > b[i])
{
aPoints++;
}
else if (a[i] < b[i])
{
bPoints++;
}
}
return (aPoints, bPoints);
}
在评论之后,如果要打印
Compare
方法返回的内容,那么对于List<int>
,您可以执行以下操作:List<int> ret = Compare(someList, anotherList);
foreach (int n in ret)
{
Console.WriteLine(n);
}
或者,您可以使用经典的
for
循环,如下所示:List<int> ret = Compare(someList, anotherList);
for (int i = 0; i < 2; i++)
{
Console.WriteLine(ret[i]);
}
但是,在此循环中,假定您的列表中始终包含2个元素。一般的方法是将循环定义更改为
for (int i = 0; i < ret.Count; i++)
,以便像foreach
循环那样遍历列表中的每个可用项。关于c# - 从方法返回List <int>并在C#中打印值时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58881168/