Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите найти и справить ошибку в методе кода Java

Владимир Беляев Знаток (286), открыт 3 недели назад
Вот сам метод:
public static String minusremove(String input) {
StringBuilder result = new StringBuilder();
char[] chars = input.toCharArray();

for (int i = 0; i < chars.length; i++) {
if (chars[i] == '-' && i > 0 && i < chars.length - 1) {
// Меняем местами символы слева и справа от минуса
char leftChar = chars[i - 1];
char rightChar = chars[i + 1];
result.append(rightChar);левого
result.append(leftChar);


i++;
} else if (chars[i] != '-') {

result.append(chars[i]);
}
}

return result.toString();
}


Суть метода в том, что бы найти минус в строке затем поменять символы слева и справа от минуса местами потом удалить минус и вернуть все это дело в входную строку.
Пример ввода: а-б
Вывод: аба
Ожидаемый вывод: ба

Я новичёк в этом деле. Уже всю голову сломал, вроде разбирая операции все логично, но вывод все равно не тот что должен быть.
Заранее спасибо за ответы(желательно с пояснением).
3 ответа
Без Без Мыслитель (6684) 3 недели назад
В эклипсе не очень детальный отладчик. В visual studio , когда поограммируешь на си - можно спустится до самого ассемблера и посмотреть как пишутся байты. На яве программировал, но сейчас врятли подскажу, надо отлаживать.
Владимир БеляевЗнаток (286) 3 недели назад
я через дебаг весь метод прошел, и ни черта так и не понял, почему символ второй раз вписывается...
Без БезМыслитель (6684) 3 недели назад
Проверь на повторный заход в метод. Сделай какую-нибудь переменную и инкрементируй её. Так узнаешь возникает ли лишний заход туда. Если такое есть принудительный выход ставь - return. Что-то было у меня такое.
Владимир Беляев Знаток (286) Без Без, повторного входа в цикл точно нету, цикл char выполняет команды внутри блока только при вводе информации в строку и не имеет других условий для повторного цикла
Владимир БеляевЗнаток (286) 3 недели назад
тут проблема в том что он меняет символы местами как положено, но добавляет символ "а" в начало еще раз, или введенные уже исправленные "ба" по какой-то причине воспринимает как один символ
Оракул Оракул (63200) 3 недели назад
Удалите else if
Владимир БеляевЗнаток (286) 3 недели назад
дак это условие переводит обнаруженный "-" в переменную chars = i.
код работать не будет если этот фрагмент удалить
Владимир БеляевЗнаток (286) 3 недели назад
эта ошибка возникает уже в строке:
result.append(chars[i - 1]); // Левый символ на место правого
уже на этом моменте символы принимают вид вывода: аба
Владимир БеляевЗнаток (286) 3 недели назад
если есть желание помочь, то можем связаться удобным способом
Владимир БеляевЗнаток (286) 3 недели назад
а все, тупанул жестко не на тот метод посмотрел, удалил и вроде помогло
Numb Просветленный (27569) 3 недели назад
Нужно изменить логику обработки символов. Вместо того чтобы увеличивать i на 1 после обработки минуса, ты можешь просто продолжить цикл, не увеличивая i.
Исправленный код:
 public static String minusremove(String input) {  
StringBuilder result = new StringBuilder();
char[] chars = input.toCharArray();

for (int i = 0; i < chars.length; i++) {
if (chars[i] == '-' && i > 0 && i < chars.length - 1) {
// Меняем местами символы слева и справа от минуса
char leftChar = chars[i - 1];
char rightChar = chars[i + 1];
result.append(rightChar);
result.append(leftChar);
// Пропускаем следующий символ, так как он уже обработан
i++;
} else if (chars[i] != '-') {
result.append(chars[i]);
}
}

return result.toString();
}
Теперь, когда ты вызываешь метод minusremove("а-б"), он должен вернуть ожидаемый результат "ба".
 public static void main(String[] args) { 
String input = "а-б";
String output = minusremove(input);
System.out.println(output); // Ожидаемый вывод: "ба"
}
Похожие вопросы