2016-08-20 6 views
0

コードの目的は、すべての回文を句読点を無視して返すことであり、大文字と小文字を区別しないでください。 コードは基本的な回文を動かすことができますが、私はそれが問題である句読点だと信じています。パインドメント文をJavaでスタックを使用

このコードで完全な文章を返す方法と、空文字列を表示する必要があるため句読点だけがある場合はtrueを返す方法を知りたいと思います。あなたのアルゴリズムの前に

import java.util.*; 

public class Palindromes { 
    public static boolean isPalindromeSentence(String sentence) { 
     Stack <String> p = new Stack<>(); 
     boolean c; 
     for (int i = 0; i < sentence.length(); i++) { 
      c = Character.isAlphabetic(sentence.charAt(i)); 
      char a; 
      if (c == true) { 
       a = Character.toLowerCase(sentence.charAt(i)); 
       p.push (a + ""); 
      } 
      else if (c == false) { 
       i++; 
      } 
     } 
     String reversed = ""; 
     while (!p.isEmpty()) { 
      reversed += p.pop(); 
     } 

     return sentence.equals(reversed); 
    } 
} 

答えて

0

、すべての非文字のご入力をきれいにし、それはあまりにも小文字ます

sentence = sentence.toLowerCase().replaceAll("[^a-z]", ""); 

スタイルプラスバグ回避のヒント:ifテストにブール値を比較することはありませんそのままそのまま使用し、冗長なelseテストを避けてください。例えば、代わりの:

if (c == true) { 
    ... 
} else if (c == false) { 
    ... 
} 

だけ

if (c) { 
    ... 
} else { 
    ... 
} 

だけでなく、これはより明確かつクリーンで、それは本当にありがとうございました嫌な「偶然の割り当て」バグ

if (c = true) { // oops! Compiles and executes, but silently assigns 
+0

の任意のチャンスを回避!私はちょうどコードを開始しているので、私は短縮された/デフォルト値のコードでは常に快適ではないので、私は全体のことを書く傾向があります。私は将来の参照のためにこれを私の心の中に間違いなく保つでしょう! – Ryota

関連する問題