2016-04-01 10 views
-1

Sınıf ödevi için bir kod parçası yazdım. Ancak oldukça uzun olduğunu düşündüm! Bunu yapmak için daha iyi bir yol var mı?Bir sayının palindrom olup olmadığını nasıl kontrol edebilirim?

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

Olası yinelenen: //stackoverflow.com/questions/4138827/check-string-for-palindrome) –

+0

Cevabıma bir bakın. Palindromu kontrol etmek için iki yöntem gösterdim. Ve [kabul] olarak kabul etmeyi unutmayın (http://stackoverflow.com/help/accepted-answer) cevapın yanındaki boş tıklamayı tıklatarak size yardımcı oldu :) Kabul etmek size de itibar kazandırıyor. Herhangi bir cevabı kabul etmezseniz, insanlar gelecekteki sorularınızı cevaplamakta isteksiz olabilirler. –

cevap

0

Kodunuz çalışır, ancak rakam ile sayılar rakamı taşıma basit ve daha okunabilir:

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

Bunları karşılaştırmak amacıyla numaraya geri dizeyi dönüştürmek için gerek yoktur. Eşit olup olmadığını kontrol etmek için string'in equals() yöntemini kullanabilirsiniz. Bunu kontrol edin (gerekli değişikliklerle birlikte bu sadece bir sayı değil, herhangi bir dize için çalışacaktır).

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!"); 
} 

Çıktı:

12300321 is a Palindrome! 

Alternatif yöntem (sadece sayı manipülasyon kullanarak; sadece tamsayılar için çalışacaktır) ([palindroma için dize edin] 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!"); 
} 
İlgili konular