2013-03-27 128 views
2

我非常接近完成我的一個練習問題,它處理一個迴文和一個字符串參數,我堅持使用調用該方法的主要方法。每次我編譯我的代碼時,它都會編譯,但是當我輸入數據時,它會繼續運行,並且不會給我一個結果。任何人都可以在我需要做的事情中幫助我獲得結果?問題只是要創建一個方法來檢查它是否是迴文,我測試它的主要方法是給我帶來麻煩。檢查一個字符串是否是迴文不是

這是我的代碼:

import java.util.*; 
public class TestisPalindrome 
{ 
    public static boolean isPalindrome(String str) { 
    int left = 0; 
    int right = str.length() -1; 

    while(left < right) { 
     if(str.charAt(left) != str.charAt(right)) { 
     return false; 
     } 
    } 
    left ++; 
    right --; 

    return true; 
    } 

    public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter a string to see if it is a palindrome or not: "); 
    String st1 = scan.nextLine(); 
    System.out.println(isPalindrome(st1)); 
    } 
} 
+0

看看這個鏈接> [Java程序來檢查字符串是不是迴文](http://www.msccomputerscience.com/2014/05/java-program-to-check-whether-string-is.html ) – ARJUN 2014-11-03 12:39:22

回答

4

右&左增量應該在while

while(left < right) 
    { 
     if(str.charAt(left) != str.charAt(right)) 
     { 
      return false; 
     } 
     left ++; 
     right --; 
    } 
+0

哇。巨大的facepalm。十分感謝你的幫助!!我解決了它。 – user2045470 2013-03-27 04:31:38

+2

@ user2045470 ay89的回答很好,但你爲什麼不把'if'條件放在一邊。像:while(str.charAt(left)!= str.charAt(right))'並且如果內部循環也會在while後面返回。 – 2013-03-27 04:33:19

1

你這個得太多。看看StringBuffer

StringBuffer input = new StringBuffer(str); 
return str.equals(input.reverse()).toString); 

請注意,您的實現的性能的影響:

while(left < right) { //multiply inner operations by n/2 
    if(str.charAt(left) != str.charAt(right)) { //three operations 
    return false; 
    } 
    //This need to be inside your while loop 
    left ++; //one operation 
    right --; //one operation 
} 

這就導致了一個O(n) = (n * 5)/2。另一方面,如果您只是反轉一個字符串,則在最壞的情況下,它只是O(n) = n。這是而不是會產生重大影響,但可以根據您如何訪問這些信息加起來。

2

您創建了一個無限循環。你有一個while循環,但從不改變條件。

while(left < right) 
{ 
    if(str.charAt(left) != str.charAt(right)) 
    { 
     return false; 
    } 
} 

假設左邊<正確,當你開始,這將永遠不會改變。

你有行左右增加的行,但是你的代碼永遠不會到達那些行,因爲它永遠不會出現while循環。

1

您也可以解決這個問題是這樣的:

public static boolean isPalindrome (String str){ 
    String convertedStr = ""; 

    for (int i = 0; i <str.length(); i++){ 
     if (Character.isLetterOrDigit(str.charAt(i))) 
      convertedStr += Character.toLowerCase(str.charAt(i)); 
    } 
    if (convertedStr.equals(reverseString(convertedStr))) 
     return true; 
    else 
     return false;  
} //End of isPalindrome 
0

這裏是我用來判斷一個字符串是否是迴文字符串或不代碼:

private static boolean isPalindromeString(String str){ 
    if (str == null) 
     return false; 
    int len = str.length(); 
    for (int i=0; i<len/2 ; i++){ 
     if (str.charAt(i) != str.charAt(len - i - 1)){ 
      return false; 
      } 
    }  
    return true; 
} 

我希望這可以幫助你。

相關問題