这应该比较每个列表上的三个数字,如果A中的数字大于B中的数字,则指向C;如果B中的数字大于A中的数字,则指向D。如果它们相等,则不执行任何操作。这是一个示例:
Input | output
A= 1 3 2 | C D
B= 3 2 2 | 1 1
代码如下:
static List<int> compareTriplets(List<int> a, List<int> b)
{
int c = 0;
int d = 0;
for (int i = 0; i < 3; i++)
{
if (a[i] > b[i])
{
c++;
}
else if (b[i] > a[i])
{
d++;
}
}
return c + " " + d;
}
这段代码向我返回:
错误CS0029:无法将类型'string'隐式转换为'System.Collections.Generic.List
'
答案 0 :(得分:4)
对我来说,这段代码看起来像您要返回2个数字:
return c + " " + d;
但是,这样它将变成一个字符串,该字符串的值与方法签名不匹配。
要返回数字列表(例如2个数字),您可以使用
return new List<int>{c, d};
答案 1 :(得分:2)
您正在尝试将字符串转换为List。函数compareTriplets
必须返回一个字符串。
建议:使用索引进行迭代时,您需要检查列表的边界。
static string compareTriplets(List<int> a, List<int> b)
{
int c = 0;
int d = 0;
for (int i = 0; i < 3; i++)
{
if (a[i] > b[i])
c++;
else if (b[i] > a[i])
d++;
}
return c + " " + d;
}
使用C#6.0+,您可以像这样返回:
return $"{c} {d}";
答案 2 :(得分:0)
您正在指定函数将返回整数列表:static List<int>
。您需要将其更改为字符串。
static String compareTriplets(List<int> a, List<int> b) {
int c = 0;
int d = 0;
for (int i=0;i<3;i++){
if (a[i]>b[i]){
c++;
}
else if (b[i]>a[i])
{
d++;
}
}
return c.ToString() + " " + d.ToString();
}
编辑:不需要显式ToString()
强制转换。
如果您确实要返回List<int>
,请执行以下操作:
static List<int> compareTriplets(List<int> a, List<int> b) {
int c = 0;
int d = 0;
for (int i=0;i<3;i++){
if (a[i]>b[i]){
c++;
}
else if (b[i]>a[i])
{
d++;
}
}
return new List<int>(){ c, d };
}
答案 3 :(得分:0)
您的返回类型为string
:a + " " + b
,因此您需要更改方法签名:
static string compareTriplets(List<int> a, List<int> b) {
// etc....
答案 4 :(得分:0)
您应该返回类型List<int>
,但您正在返回c +" "+ d
。我不明白其余的问题。
您应该返回一个列表。这是一个示例:
static List<int> compareTriplets(List<int> a, List<int> b)
{
int c = 0;
int d = 0;
for (int i=0;i<3;i++)
if (a[i]>b[i])
c++;
else if (b[i]>a[i])
d++;
return new List<int>{ c, d };
}