2014-02-21 50 views
2

我在java代碼中做了一個非常簡單的應用程序,但由於某種原因,它不起作用。它是一個迴文檢查器。在java代碼中檢查迴文

這裏是代碼。

MAIN:

public class main { public static void main(String[] args) { Palindroom.palindroomChecker("RACECAR"); } }

`Palindroom類:

公共類Palindroom {

public static void palindroomChecker(String input) { 
    String omgekeerd = ""; 
    boolean isPalindroom = false; 
    int length = input.length(); 
    for(int i = 0; i < length; i++) { 
     String hulp = "" + input.charAt(i); 
     omgekeerd = omgekeerd + hulp; 
    } 
    System.out.println(omgekeerd); 
    System.out.println(input); 
    if(omgekeerd.equals(input)){ 
     System.out.println("DIT IS EEN PALINDROOM!"); 
    } 
    else { 
     System.out.println("HELAAS, DIT IS GEEN PALINDROOM!"); 
    } 
} 

}`

出於某種原因,在if語句檢查沒有去,因爲它必須去。正如你可以看到我檢查omgekeerd和輸入,我也檢查了早些時候omgekeerd的長度,看看是否有明確的空間。

有人可以幫助我!

在此先感謝

問候莫羅Palsgraaf

+0

入住http://stackoverflow.com/questions/4138827/check-string-for-palindrome?rq=1 –

回答

1

你實際上並沒有扭轉字符串,看起來像omgekeerd將在相同的順序輸入。

更換與for(int i = length-1; i >= 0; i--) {

2

你的邏輯是有缺陷的。通過以相同的順序追加輸入的每個字符,然後檢查兩個字符串是否相等,重新構建一個新字符串。所以你的方法總是說輸入是迴文。

您應該以相反的順序附加字符來構造一個新的字符串。

或者你可以通過檢查第n個字符是相同的,在長度的字符使其更快 - 1 - N位置時,對於0和長度之間的每個n/2。

0

這可以簡化很多

boolean isPalindrome = new StringBuilder(input).reverse().equals(input); 
+0

在NetBeans中,我得到一個黃色的線下等於說其對不兼容的類型。你會碰巧知道爲什麼? 我用此固定了 boolean isPalindroom = input.equals(new StringBuilder(input).reverse()。toString()); – Vahx

0

也許這會適合你嗎?

String str = "madam i'm adam."; // String to compare 
str = str.replaceAll("[//\\s,',,,.]",""); // Remove special characters 
int len = str.length(); 
boolean isSame = false; 

for(int i =0; i<len;i++){ 
    if(str.charAt(i) == str.charAt(len-1-i)){ 
     isSame = true; 
    } 
    else{ 
     isSame = false; 
     break; 
    } 
} 
if(isSame){ 
    System.out.print("Equal"); 
} 
else{ 
    System.out.print("Not equal"); 
}