Программа симметрии строки
Эй, я мог бы использовать небольшую помощь, чтобы выяснить, почему моя программа не работает. Вопрос состоит в том, чтобы создать программу с использованием рекурсии, которая вычисляет, является ли данный текст палиндромом или нет после удаления всех знаков препинания и пробелов. Пока программа компилируется, она возвращает каждое значение как ложное. Нам разрешено изменять только метод isSymmetrical. Я мог бы использовать любую возможную помощь, пытаясь выяснить, как заставить это работать. Спасибо.
public class StringSymmetry {
public static boolean isSymmetrical(String inputText)
{
if(inputText.length() == 0 || inputText.length() ==1)
return true;
if(inputText.charAt(0) == inputText.charAt(inputText.length()-1))
return isSymmetrical(inputText.substring(1,inputText.length()-1));
return false;
}
public static void main(String[] args) {
String[] sampleData =
{ "Don't nod",
"Dogma: I am God",
"Too bad - I hid a boot",
"Rats live on no evil star",
"No trace; not one carton",
"Was it Eliot's toilet I saw?",
"Murder for a jar of red rum",
"May a moody baby doom a yam?",
"Go hang a salami; I'm a lasagna hog!",
"Name is Bond, James Bond"
};
for (String s : sampleData)
{
System.out.println("isSymmetrical (" + s + ") returns " + isSymmetrical(s));
}
}
}
2 ответа
Проблема в том, что вы не включили какие-либо проверки для регистра или пунктуации и пробелов.
Один из способов сделать это - что-то вроде этого. Особенности зависят от того, что вам разрешено использовать для назначения, но вы, вероятно, намерены сделать что-то в этом роде.
Также обратите внимание, что toLowerCase
проблематично, если для локали по умолчанию задано что-то необычное, например, Турция. Для правильной устойчивости вам нужно указать локаль, но вам не придется беспокоиться об этом при выполнении домашнего задания.
public static boolean isSymmetrical(String inputText)
{
inputText = inputText.toLowerCase();
if(inputText.length() == 0 || inputText.length() ==1)
return true;
if(!Character.isLetter(inputText.charAt(0)))
return isSymmetrical(inputText.substring(1,inputText.length()));
if(!Character.isLetter(inputText.charAt(inputText.length()-1)))
return isSymmetrical(inputText.substring(0,inputText.length()-1));
if(inputText.charAt(0) == inputText.charAt(inputText.length()-1))
return isSymmetrical(inputText.substring(1,inputText.length()-1));
return false;
}
Проверьте следующую функцию:
public static boolean isPalindrome(String str, int x) {
if(x == 0) return true;
if(str.charAt(0) == str.charAt((str.length() - 1)))
return isPalindrome(str.substring(1, str.length() - 1), x - 1);
return false;
}
Объяснение:
Рекурсивная функция со следующими параметрами:
-
str
- объект String, который будет проверяться на симметрию. -
x
- Целое число, представляющее параметр рекурсивного тестера и определяющее, насколько далеко вы хотите выполнить итерацию и проверить двустороннюю симметрию.
Базовый случай устанавливается равным нулю, а возврат
true
когда вы закончили желаемый номер итерации.
Второй оператор if-условия используется для проверки углов заданной строки и ее
return
оператор рекурсивно войдет в другой цикл тестирования с более короткими углами исходной строки (... углы будут короче на единицу).