При выполнении кода, на проверку, является ли строка палиндромом, попадаю на ситуацию, что при любом корректном определении несоответствия строки условиям палиндрома, получаю сначала верное сообщение, что строка им не является (это срабатывает внутри else в функции), а затем ошибочное, что строка им является (это срабатывает else в теле основной программы).
Понимаю, что дело где-то в финальном return, но что не так, не могу определить.
Задача дана с обязательным использованием логической рекурсивной функции без циклов, поэтому другие варианты реализации, к сожалению, не подходят.
Выдает вот так, например: Введите строку: 1231 К большому сожалению, введенная строка не является палиндромом Танцуем, мы нашли палиндром!
package com.company;
import java.util.Scanner;
public class Main {
public static boolean palindrom(boolean prov, String str, int i, int len){
//если к середине строки мы не выпали по несовпадающим символам, значит нашли палиндром
if (len - 1 <= i) {
System.out.println("Танцуем, мы нашли палиндром!");
return prov = true;
}
//если символы по указателю счетчиков совпали, то уходим в рекурсию
if (str.charAt(i) == str.charAt(len - 1))
palindrom(prov, str, i + 1, len - 1);
//если не совпали, то строка не является палиндромом
else {
System.out.println("К большому сожалению, введенная строка не является палиндромом");
return prov = false;
}
return prov;
}
public static void main(String[] args) {
//вводные
System.out.println("Программа считывает строку и проверяет, является ли она палиндромом. Программа не чувствительна к регистру, но чувствительно к знакам пунктуации.");
System.out.println();
//считываем строку, готовим переменные
System.out.print("Введите строку: ");
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
str = str.replaceAll("\\s","");
str = str.toLowerCase();
int len = str.length();
int i = 0;
boolean prov = true;
//если строка пустая или содержит 1 символ, или функция вернула ложь, то не палиндром
if (len <= 1 || palindrom(prov, str, i, len) == false)
System.out.print("К большому сожалению, введенная строка не является палиндромом");
//иначе палиндром
else
System.out.println("Танцуем, мы нашли палиндром!");
}
}
Нельзя, рекурсивно вызывая функцию, игнорировать возвращаемое значение. Вы же ее для того и вызываете, чтобы получить ее результат.
И не выводите никаких сообщений внутри функции palindrom
. Ее задача - определить палиндром строка или нет.
public static boolean palindrom(String str, int i, int len){
if (len - 1 <= i) {
return true;
}
if (str.charAt(i) == str.charAt(len - 1)) {
return palindrom(str, i + 1, len - 1); // !!!
}
return false;
}
function palindrom(str, i, len) {
if (len - 1 <= i) {
return true;
}
if (str[i] == str[len - 1]) {
return palindrom(str, i + 1, len - 1); // !!!
}
return false;
}
var str1 = "arozaupalanalapuazora";
var str2 = "arozaupalWWanalapuazora";
console.log(palindrom(str1, 0, str1.length));
console.log(palindrom(str2, 0, str2.length));
console.log(palindrom("1231", 0, "1231".length));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Стоит задача отсортировать все буквы в строке по алфавитуПрограмма должна игнорировать регистр при сортировке
Всем привет, проблема с IDEПочему-то как-то странно стали располагаться папки, в смысле папка resource автоматически стала пытаться стать root папкой
Нужно создать объект(Возможно даже для каждого языка отдельный класс) который хранит в себе все сообщенияПри нужде выводить пользователю...
С сервера приходит ответ в котором указано время в путиСуть в том, что иногда приходит в таком виде 45 ( то есть понимается что 45 минут) А иногда...