2014-01-14 33 views
-2

我是C#的新手,我試圖讓一個簡單的isPalindrome方法工作。基本上我的for循環從來沒有進入。我試着給它一個字符串「hannah」,它永遠不會在for循環的主體中打印一個Console.writeline方法調用。但是在for循環之前的兩個WriteLine調用對於「hannah」返回true,所以它應該進入for循環並至少從for循環體輸出一條語句。我的循環有什麼問題?爲什麼我的c#for循環無法進入?

private static Boolean isPalindrome(string s) 
{ 
    int counter = 0; 
    if (s.Length == 1) 
    { 
     return true; 
    } 

    Console.WriteLine(s[counter]==s[(s.Length - counter - 1)]); //this returns true 
    Console.WriteLine((counter != (s.Length/2))); //this returns true 

    for (; (counter != (s.Length/2)) & (s[counter] == (s.Length - counter - 1)); counter++) 
    { 
     Console.WriteLine("s[counter is {0} and s.length-counter-1 is", s[counter], s[(s.Length -     counter - 1)]); 

     //The above line never prints; why doesn't my for loop get entered? 
    } 

    if((counter == (s.Length/2))) { 
     return true; 
    } 

    return false; 
} 

回答

5

將您的病情的第二部分更改爲(s[counter] == s[s.Length - counter - 1])

否則,您正在比較s[counter]的數值表示與s.Length - counter - 1,而不是該索引下的字符。

0

嘗試......

public bool IsPalindrome(string s) 
{ 
    bool isPalindrome = true ; 
    int i = 0 ; 
    int j = s.Length ; 
    while (j > i && isPalindrome) 
    { 
    isPalindrome = s[i++] == s[--j] ; 
    } 
    return isPalindrome ; 
} 

開始在兩端,並依次在每個人物進行比較。假設成功。當指針收斂或比較失敗時,測試結束。