我试图在控制台中转换文本并反转它以查看它是否是回文。如果是,那么它将返回true,如果不是,则返回false。但是,由于我是新手并且刚刚开始学习C#,我面临着错误。我得到的错误如下:
'Palindrome.IsPalindrome(string)':并非所有代码路径都返回一个值
我不知道如何解决这个问题,我不太明白,所以任何建议都会非常感激。谢谢。
using System;
public class Palindrome
{
public static bool IsPalindrome(string word)
{
char[] temp = word.ToCharArray();
Array.Reverse(temp);
string emordnilap = new string(temp);
if(word.Equals(emordnilap)){
Console.WriteLine("true");
}else{
Console.WriteLine("false");
}
}
public static void Main(string[] args)
{
Console.WriteLine(Palindrome.IsPalindrome("Deleveled"));
}
}
您的方法定义为public static bool IsPalindrome(string word)
这意味着它必须return
布尔值(真或假)。
你实际上并没有返回任何东西,你只是把它写到控制台上,这就是你的错误 - 你没有返回一个值。
您需要在代码中放置return true;
或return false;
,以便通过该方法的每个可能路径都会返回您返回方法签名中指定的bool
。
这给你另一个问题,因为你正在做Console.WriteLine(_),其中_是你的IsPalindrome方法的return
值。既然你要返回一个bool
,那么将它写入控制台是很奇怪的。它会工作,但更好的方法是调用这样的方法:
var isPalindrome = Palindrome.IsPalindrome("Deleveled");
if (isPalindrome == true)
{
Console.WriteLine("It IS a palindrome!");
}
请注意,if (isPalindrome == true)
可以缩短为if (isPalindrome)
OO编程的核心方面之一是SOLID,它是编写代码的一些指导原则。其中之一就是单一责任原则,这基本上意味着你应该尝试让你的代码只做一件事。
所以你的IsPalindrome最好只做一件事 - 如果这个词是回文,则返回true或false - 而不做其他事情,比如写入控制台。将其留给调用该方法的代码。
只是提示你的方法意外返回false - Racecar
与racecaR
不同 - 你将不得不对此案做些什么。快速执行此操作的方法是使用ToUpper()
将值转换为大写,然后再进行比较。
您的方法应返回bool
而不是写入控制台。试试:
public static bool IsPalindrome(string word)
{
char[] temp = word.ToCharArray();
Array.Reverse(temp);
string emordnilap = new string(temp);
if(word.Equals(emordnilap)){
return true;
}
else{
return false;
}
}
此方法可以采用的每个路径都必须返回一个布尔值:
using System;
public class Palindrome
{
public static bool IsPalindrome(string word)
{
char[] temp = word.ToCharArray();
Array.Reverse(temp);
string emordnilap = new string(temp);
if(word.Equals(emordnilap))
{
return true;
}
else
{
return false;
}
}
public static void Main(string[] args)
{
//The ToString() converts your boolean to a string
Console.WriteLine(Palindrome.IsPalindrome("Deleveled").ToString());
}
}
尝试更容易理解命名变量。如果你进入更大的项目,这将使你的生活更轻松。见here