2014-10-25 5 views
1

Итак, когда я запускаю этот код с любым словом, он всегда возвращает false. Первая строка принимает слово, а затем изменяется на нижний регистр. Затем я строю новую строку из нее, чтобы сравнить ее с другой строкой, которая добавляется как обратная сторона исходного слова. Разве я ничего не вижу, или вы можете сказать мне, что с ним не так?Проверка, является ли слово Палиндром или нет

public class Palindromes 
 
{ 
 
\t public static void main(String[] args) 
 
\t { 
 
\t \t int count = Integer.parseInt(args[0]); 
 
\t \t for(int i = 1; i <= count; i++) 
 
\t \t { 
 
\t \t \t System.out.print(isPalindrome(args[i]) + " "); 
 
\t \t } 
 
\t } 
 
\t public static boolean isPalindrome(String s) 
 
\t { 
 
\t \t String str = s.toLowerCase(); 
 
\t \t StringBuilder orig_str = new StringBuilder(str); 
 
\t \t StringBuilder revStr = new StringBuilder(); 
 
\t \t for (int i = str.length()-1; i >= 0; i--) 
 
\t \t { 
 
\t \t \t revStr.append(orig_str.charAt(i)); 
 
\t \t } 
 
\t \t boolean isPal = (revStr == orig_str); 
 
\t \t return isPal; 
 
\t } \t \t 
 
}

ответ

4

Сравнение двух различных StringBuilder экземпляров с == всегда будет давать вам ложные, независимо от их содержания, поскольку они не тот же экземпляр.

Попробуйте revStr.toString().equals(str)

Кажется, что StringBuilder не отменяет Object «s equals, так что вы должны выполнить equals на String с, в результате которых из StringBuilder с.

КСТАТИ StringBuilder имеет метод reverse, так что вы можете повторно написать свой метод в одной строке:

public static boolean isPalindrome(String s) { 
    return new StringBuilder(s.toLowerCase()).reverse().toString().equals(s.toLowerCase()); 
} 
+0

Хорошо, я изменить логическое значение для revStr.equals (orig_str), но она по-прежнему дает мне ложное значение. – Santo

+0

@Santo Исправлено. Я не понял, что 'StringBuilder' не переопределяет' equals'. – Eran

+0

Я закончил с заменой revStr на строку после добавления ее. их сравнение отлично работает. Большое спасибо. – Santo

Смежные вопросы