(Hackerrank-Fair Rations)返回字符串时出现以下错误(C#)。错误CS0029:无法隐式转换类型字符串';整型
错误CS0029:无法将类型string'隐式转换为int 我想解决哈克朗克的问题。我应该返回一个整数或字符串“NO”。当我试图返回字符串“否”时,出现以下错误消息(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++)
// 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
。该模式基于以下两个原则:
公平分配
功能,如下所示:
静态布尔公平(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的intint?
并返回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