#java
#java
Вопрос:
public class Lab3Exercises {
public static void main(String[] args){
Scanner s = new Scanner([System.in](https://System.in));
System.out.println("Please enter a word to check if it is a palindrome");
String myP = [s.next](https://s.next)();
System.out.println(palindrome(myP));
}
public static boolean palindrome(String p){
String myWord = p;
String reverseWord = "";
int i = 1;
while (i < myWord.length()){
reverseWord = myWord.charAt(i) myWord.substring(0, i) myWord.substring((i 1), myWord.length());
i ;
}
if (reverseWord.equals(myWord)) {
return true;
}
else{
return false;
}
}
Я проверил, и обратное слово точно такое же, как MyWord, но оно каждый раз возвращает false. Я пробовал hannah, racecar и т.д. все они возвращают false
Комментарии:
1. Имеет ли это какое-либо отношение к лабораторной утилите?
2. Для вашего примера word ханна , значение
reverseWord
послеwhile
цикла равно hhanna .3. Вы можете упростить свой код,
return reverseWord.equals(myWord)
он значительно короче, чем тот, который вы используете if-else…
Ответ №1:
Давайте начнем с более простых примеров.
- Например, если
p
имеет длину 1s
(палиндром), вы задаетеreverseWord
значение пустой строки. Посколькуi
начинается с 1, оно не меньше длины, поэтому цикл не выполняется. Поскольку пустая строка не равнаs
, метод возвращает false . - Ввод
tt
(другой палиндром). Вы выполняете цикл один раз, устанавливаяreverseWord
значение"t" "t" ""
="tt"
. В этом случае метод корректно возвращает true. - Ввод
obo
: Вы устанавливаетеreverseWord
сначала вboo
, затем в"oob"
("o" "ob" ""
), отбрасывая первое значение.
Я думаю, вам нужно еще раз продумать свою логику.
Совет: научитесь использовать отладчик.
Ответ №2:
Ваше условие неверно, потому что способ построения перевернутого слова неверен.
- Вы начинаете с
i
равно0
- Вы переназначаете новое значение на
reverseWord
в каждом цикле - Способ, которым вы создаете перевернутую строку, для меня совершенно загадка
Хорошим решением было бы следующее (вы пишете код :))
- Попробуйте начинать свои циклы с индекса, начинающегося в самом конце исходного слова
- Выполняйте цикл до тех пор, пока не достигнете 0, в основном, пока не останется ни одной буквы, к которой можно было бы добавить
reverseWord
- В каждом цикле добавляйте одну букву в
reverseWord
вместо результата сложной операции
Ответ №3:
- Нет необходимости создавать новую ссылку для слова plaindrome, которое вы собираетесь проверить.
- Вы должны сохранить слово в обратном порядке в переменной reverseWord.
- Последний индекс массива символов (String) в java на 1 меньше длины строки. Первый индекс равен 0.
-
Итак, цикл while считывает строку с конца, чтобы начать индексировать и сохранять.
public static boolean palindrome(String p){ String reverseWord = ""; int i = p.length() - 1; while (i >= 0){ reverseWord = p.charAt(i); i--; } if (reverseWord.equals(p)) { return true; } return false; }
Комментарии:
1. На мой вкус, слишком много кормления с ложечки. Вы верите, что запрашивающий чему-то учится из этого?
2. Обновлен ответ и что-нибудь еще неясно в ответе?. Вы должны практиковаться, чтобы делать все правильно. Удалено значение false, потому что, если условие удовлетворено, в коде больше ничего не будет выполняться. Оператор Return должен быть конечным оператором любого метода Java.