无法测试Palindrome

问题描述 投票:1回答:3

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

}
c#
3个回答
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)

OO编程的核心方面之一是SOLID,它是编写代码的一些指导原则。其中之一就是单一责任原则,这基本上意味着你应该尝试让你的代码只做一件事。

所以你的IsPalindrome最好只做一件事 - 如果这个词是回文,则返回true或false - 而不做其他事情,比如写入控制台。将其留给调用该方法的代码。

只是提示你的方法意外返回false - RacecarracecaR不同 - 你将不得不对此案做些什么。快速执行此操作的方法是使用ToUpper()将值转换为大写,然后再进行比较。


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;
        }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.