2016-04-01 8 views
-1

私はクラスの宿題のためのコードを書いた。しかし、私はそれがかなり長いと思った!これを行うためのより最適化された方法がありますか?数字が回文かどうかを確認するには?

String text = input.readLine(); 
int num = (text.length())/2; 
double letter = (double)(text.length())/2; 
String s1 = text.substring(0,num); 
int u1 = Integer.parseInt(s1);  

if (letter%1==0) {   
    StringBuffer s2 = new StringBuffer(text.substring(num)); 
    s2 = s2.reverse(); 
    String t2 = s2.toString(); 
    int u2 = Integer.parseInt(t2); 
    if (u1==u2) { 
     System.out.println("Palindrome"); 
    } else { 
     System.out.println("FAIL"); 
    } 
} else { 
    StringBuffer s2 = new StringBuffer(text.substring(num+1)); 
    s2= s2.reverse(); 
    String t2 = s2.toString(); 
    int u2 = Integer.parseInt(t2); 
    if (u1==u2) { 
     System.out.println("Palindrom"); 
    }else { 
     System.out.println("FAIL"); 
    } 
} 
+1

可能な重複: //stackoverflow.com/questions/4138827/check-string-for-palindrome) –

+0

私の答えを見てください。私は回文をチェックする2つの方法を示しました。そして、それを[承諾](http://stackoverflow.com/help/accepted-answer)としてマークすることを忘れないでください。答えの隣にあるくぼみをクリックすることによってあなたを助けました:)受け入れはあなたにも評判を与えます。あなたが何も答えを受け入れない場合、人々はあなたの将来の質問に答えることに消極的かもしれません。 –

答えて

0

あなたのコードは動作しますが、桁の数字の桁を処理することは、よりシンプルで読みやすいです:

public static boolean isPalindromic(String num) { 
    for(int i = 0, len = num.length() ; i < len/2 ; i++) { 
     if(num.charAt(i) != num.charAt(num.charAt(len-i-1))) return false; 
    } 

    return true; 
} 
1

あなたがそれらを比較するために、バックナンバーに文字列を変換する必要はありません。文字列のequals()メソッドを使用して、等しいかどうかを調べることができます。これをチェックしてください(必要な変更を加えれば、数字だけでなく文字列も同様です)。

int num = 12300321; 
String numString = String.valueOf(num); 
String reverseNumString = new StringBuilder(numString).reverse().toString(); 

if(numString.equals(reverseNumString)) { 
    System.out.println(num + " is a Palindrome!"); 
} 
else { 
    System.out.println(num + " is not a Palindrome!"); 
} 

出力:

12300321 is a Palindrome! 

代替方法(番号のみ操作を使用して、整数のみのために動作します)([回文の文字列をチェック]のhttpの

int num = 12300321; 
int numCopy = num; 
int reverseNumInt = 0; 

while(numCopy != 0) { 
    reverseNumInt = reverseNumInt * 10 + numCopy % 10; 
    numCopy /= 10; 
} 
if(reverseNumInt == num) { 
    System.out.println(num + " is a Palindrome!"); 
} 
else { 
    System.out.println(num + " is not a Palindrome!"); 
} 
関連する問題