我对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)
如果你能帮助我一点,我会非常高兴:)
答案 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#中的字符串是不可变的,这意味着每次将新字符串(或字符)连接到现有字符串时,它都会生成一个全新的对象。因此,为了提高反向例程的效率,您可能希望使用StringBuilder
和StringBuilder.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;
}