(Hackerrank-Fair Rations)返回字符串时出现以下错误(C#)。错误CS0029:无法隐式转换类型字符串';整型

(Hackerrank-Fair Rations)返回字符串时出现以下错误(C#)。错误CS0029:无法隐式转换类型字符串';整型,c#,.net,string,int,return,C#,.net,String,Int,Return,错误CS0029:无法将类型string'隐式转换为int 我想解决哈克朗克的问题。我应该返回一个整数或字符串“NO”。当我试图返回字符串“否”时,出现以下错误消息 // Solution.cs(49,16): error CS0029: Cannot implicitly convert type `string' to `int' 下面是我的代码 int temp = 0; string s = "N0"; for(int i = 0; i < B.Length - 1; i++)

错误CS0029:无法将类型string'隐式转换为int

我想解决哈克朗克的问题。我应该返回一个整数或字符串“NO”。当我试图返回字符串“否”时,出现以下错误消息

// Solution.cs(49,16): error CS0029: Cannot implicitly convert type `string' to `int'
下面是我的代码

int temp = 0;
string s = "N0";

for(int i = 0; i < B.Length - 1; i++)
{  
   if(B[i] % 2 == 1)
   {
        B[i] = B[i] + 1;
        B[i + 1] = B[i + 1] + 1;
        temp += 2;
   }
}

for(int i = 0; i < B.Length; i++)
{
    if(B[i] % 2 == 1)
    {
        temp = 0;
    }
}

if(temp > 0)
{
    return temp;
}
else
{
    return s;
}
打印单个整数taht表示必须分发的最小面包数量,以便每个人都有偶数个面包。如果无法执行此操作,请打印“否”

这种运算结果不能轻易地从C#函数返回。C#函数的返回值为one,类型为single。int和string是互斥的返回类型


除非您愿意进入允许多个返回值的复杂且先进的机制(我建议复制TryParse中使用的模式,用于bool/int返回),否则您必须使用Console.WriteLine()在函数内部进行输出。这个可以是int或string。威奇听起来更像你应该做的。我可以在主函数中包含整个代码,在这一点上,没有返回是有意义的。

我想我理解为什么你会感到困惑。如果您访问该网站,并选择用C#编写答案,您将获得以下模板:

使用System.CodeDom.Compiler;
使用System.Collections.Generic;
使用系统集合;
使用系统组件模型;
使用System.Diagnostics.CodeAnalysis;
利用制度全球化;
使用System.IO;
使用System.Linq;
运用系统反思;
使用System.Runtime.Serialization;
使用System.Text.RegularExpressions;
使用系统文本;
使用制度;
类解决方案{
//完成下面的公平分配功能。
静态整流罩(整流罩[]B){
}
静态void Main(字符串[]参数){
TextWriter TextWriter=newstreamWriter(@System.Environment.GetEnvironmentVariable(“输出路径”),true);
int N=Convert.ToInt32(Console.ReadLine());
int[]B=Array.ConvertAll(Console.ReadLine().Split(“”),BTemp=>Convert.ToInt32(BTemp))
;
int结果=公平分配(B);
textWriter.WriteLine(结果);
textWriter.Flush();
textWriter.Close();
}
}
但其中一项要求是:

如果无法执行此操作,请打印
NO

说明书上说:

//完成下面的公平分配功能。

这是一个糟糕的模板
,如果解决方案不可行,则该函数还需要处理额外的打印条件

您必须修改
公平分配
函数的签名
,以处理无法解决的情况。您还可以修改
Main
中的代码,这显然不足以满足挑战的要求

如果您需要将
int结果
以外的内容写入输出,则需要进行不同的
textWriter.WriteLine
调用以输出字符串

我强烈推荐在函数中使用的模式,如
int.TryParse
Dictionary.TryGetValue
。该模式基于以下两个原则:

  • 返回bool以指示成功/失败
  • 通过out参数为成功案例交付有效负载(在本例中为整数)
  • 修改
    公平分配
    功能,如下所示:

    静态布尔公平(int[]B,out int结果){
    如果(/*TODO:有可能?*/){
    result=/*TODO:无论结果是什么*/;
    返回true;
    }否则{
    结果=0;
    返回false;
    }
    }
    
    您可能需要在
    Main
    中修改调用,如下所示:

    改变

    int结果=公平分配(B);
    textWriter.WriteLine(结果);
    

    if(公平分配(B,out int结果)){
    textWriter.WriteLine(结果);
    }否则{
    textWriter.WriteLine(“否”);
    }
    
    您的方法是如何声明的?例如,
    intmethodname(…)
    ?在这种情况下,您不能返回字符串。字符串必须解析为int。没有自动转换。但是,这个编译器错误的唯一候选项是返回,因为函数说它将返回int。您可以使用
    string
    作为返回类型,并将数字作为string(
    return temp.ToString()
    )返回。只是不要使用返回的值执行任何计算。质询要求将输出写入输出。所以只要
    Console.WriteLine(“否”)
    控制台写入线(临时)而不是返回它。@Wyck当我使用
    控制台.WriteLine()时出现以下错误消息
    //Solution.cs(18,16):错误CS0161:Solution.fairRations(int[]):并非所有代码路径都返回值
    您可以返回可为null的int
    int?
    并返回temp或
    null
    。然后,当我们打印结果时,我们可以检查结果是否有值,打印它,或者如果没有,则打印“否”。您还可以遵循.NET模式的
    TryParse
    TryGetValue
    等,它们返回bool(成功或失败),并使用
    out
    参数作为成功案例中返回的实际值。@Wyck您可以,但这有代码气味的臭味。这是我甚至没有考虑过的事情之一,因为它感觉到了“错误”。“克里斯托弗谢谢你的帮助。但是当我使用Console.WriteLine()时,会出现以下错误消息`//Solution.cs(18,16):错误CS0161:Solution.fairRations(int[]):并非所有代码路径都返回值`@DulmikaSapumal您说过函数将返回某个值,因此它必须返回某个值。必须生成一个值或一个异常
    //Solution.cs(18,16): error CS0161: `Solution.fairRations(int[])': not all code paths return a value