无法测试回文

时间:2019-03-22 15:42:53

标签: c#

我正在尝试在控制台中转换文本并将其反转以查看它是否是回文。如果是,则返回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"));
    }

}

3 个答案:

答案 0 :(得分:5)

您的方法定义为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)

面向对象编程的核心方面之一是SOLID,这是一些编写代码的准则。其中之一就是“单一责任原则”,它基本上意味着您应该尝试使代码的某些部分仅做一件事。

因此,对于IsPalindrome来说,最好只做一件事-如果单词是回文,则返回true或false-而不要做其他事情,例如写到控制台。留给调用该方法的代码。

仅是提示您的方法何时意外返回false-RacecarracecaR不同-您将不得不对这种情况做些事情。一种快速的方法是使用ToUpper()将值转换为大写,然后反转并进行比较。

答案 1 :(得分:2)

您的方法应返回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;
        }
}

答案 2 :(得分:0)

此方法可以采用的每条路径都必须返回一个布尔值:

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