回文 - 错误

时间:2012-09-04 14:16:37

标签: c# palindrome

我对C#很陌生,我正在制作一个小应用程序来检查控制台的输入是否是回文。我自己走得很远,但是我遇到了一个错误。

代码:

class Program
{
    static void Main(string[] args)
    {
        string str;
        Console.WriteLine("Voer uw woord in:");
        str = Console.ReadLine();

        if (isPalindroom(str) == true)
        {
            Console.WriteLine(str + " is een palindroom");
        }
        else
        {
            Console.WriteLine(str + " is geen palindroom");
        }

    }

    bool isPalindroom(String str)
    {
        string reversedString = "";
        for (int i = str.Length - 1; i >= 0; i--)
        {
            reversedString += str[i];
        }
        if (reversedString == str)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

我收到此错误:

  

错误1非静态字段,方法或属性需要对象引用'ConsoleApplication2.Program.isPalindroom(string)' snap 17 17 ConsoleApplication2

以下是:

if (isPalindroom(str) == true)

如果你能帮助我一点,我会非常高兴:)

8 个答案:

答案 0 :(得分:5)

只需将static修饰符添加到isPalindroom方法。

如果你不这样做,isPalindroom将成为"实例"方法,可以在Program实例上调用。

简单来说,因为你没有类型的变量程序(主方法本身是静态的),你不能调用非静态方法。

可以在类型本身(Program.isPalydroom(xxx))或类中的任何其他方法上调用静态方法。

答案 1 :(得分:3)

使函数静态:

static bool isPalindrome(String str)
{
}

Main()方法是静态的(按要求),因此它只能调用静态成员。

因为你的bool isPalindrome()是一个'纯'函数,即它只需要来自其参数的数据,所以它可以是静态的。

小挑剔:总是使用PascalCasing作为方法名称,IsPalindrome

答案 2 :(得分:1)

更改 bool isPalindroom(String str)

static bool isPalindroom(String str)

答案 3 :(得分:1)

“isPalindrome”的声明需要修改为“static bool isPalindrome(String str)”,或者你需要把它作为一个类实例的方法,你可以在Main实例化并从那里调用。

答案 4 :(得分:1)

主要是静态..你的功能

  bool isPalindroom(String str) 

应该是

static  bool isPalindroom(String str) 

答案 5 :(得分:1)

成功;

static bool isPalindroom(String str)
{
 ....
}

Main例程是静态的,因此您不在程序类的实例中,并且无法调用实例方法。使isPalindroom成为静态例程将解决这个问题。

有关静态方法和类的更多信息,请参阅;

http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx

答案 6 :(得分:1)

正如其他人已经提到的那样,你应该将isPalindroom()方法设为静态。

这里有一个关于你正在逆转字符串的方式的快速说明:

C#中的字符串是不可变的,这意味着每次将新字符串(或字符)连接到现有字符串时,它都会生成一个全新的对象。因此,为了提高反向例程的效率,您可能希望使用StringBuilderStringBuilder.Append()

除此之外,而不是:

string reversedString = "";
for (int i = str.Length - 1; i >= 0; i--)
{
    reversedString += str[i];
}

您只需输入:

即可
string reversedString = new string(str.Reverse().ToArray())

答案 7 :(得分:1)

这里你去了,一个更好的文化/案例/规范化不敏感版本

using System.Globalization;

bool IsPalindrome(string value, StringComparer comparer = null)
{
    if (s == null)
    {
        throw new ArgumentNullException("value");
    }

    if (comparer == null)
    {
        comparer = StringComparer.CurrentCultureIgnoreCase;
    }

    var elements = new List<string>();
    var m = StringInfo.GetTextElementEnumerator(value);
    while (m.MoveNext())
    {
        elements.Add(m.GetTextElement());
    }

    var i = 0;
    var j = elements.Count - 1;
    var limit = elements.Count / 2;
    for(; i <= limit; i++, j--)
    {
        if (!comparer.Equals(elements[i], elements[j]))
        {
            return false;
        }
    }

    return true;
}