美好的一天。
几年后我又回到了C#,而且我很少接受我收到的错误。我写了一个练习程序,以确定一个单词是否是回文(相同的向后和向前)。然而,我收到一个令我困惑的错误。
我尝试调用Math.Ceiling(word.Length / 2)来获取单词的中间部分,但它给出了以下错误: “以下方法或属性之间的调用不明确:'Math.Ceiling(decimal)和Math.Ceiling(double)”
虽然我知道这是编译器担心识别正确的重载方法,但我不确定如何指出我正在使用的方法。我也不明白为什么要这么重要?
这是我的完整计划:
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string word = "Deleveled";
word = word.ToUpper();
bool isPalindrome = true;
for (var i = 0; i <= Math.Ceiling(word.Length / 2); i++)
{
char tmp = word[word.Length - i - 1];
if (Char.ToUpper(word[i]) != Char.ToUpper(tmp))
{
isPalindrome = false;
break;
}
}
Console.WriteLine(isPalindrome);
Console.ReadLine();
}
}
}
如果有人能帮我理解这里的问题,我将不胜感激?
我提前感谢
答案 0 :(得分:7)
整数除法总是产生整数;所以:word.Length / 2
返回int
(向下舍入)。
当您在此处调用Math.Ceiling
时,您传递的是整数,但不是 Math.Ceiling(int)
。它有两个选择:Math.Ceiling(double)
和Math.Ceiling(decimal)
,但是:它可以使用其中任何一个,从编译器的角度来看,这些都不是更好。
坦率地说,使用通用&#34;页数&#34;可能更简单。式:
int pages = (items + pageSize - 1) / pageSize;
在这种情况下变得简单:
int upperLimit = (word.Length + 1) / 2;
(请注意,通用页面计数公式也可以写成int pages = ((items - 1) / pageSize) + 1;
,但在这种情况下,替换固定页面大小会更难)