@MrBe

Возможно упростить алгоритм?

Здравствуйте, написал алгоритм для лабораторной работы по java, но получился слишком сложный для понимания. Прошу совета, как его можно упростить. Можно использовать только массивы.


Задание:
Сдвиг во введенной строке четных символов на 2 позиции вправо. Сдвиг полагать кольцевым.


public static String moveLetters(String a) {
        char[] chars = a.toCharArray();
        char lastChar = ' ';
        if (chars.length % 2 == 0) {
            lastChar = chars[chars.length - 1];
        } else if ((chars.length - 1) % 2 == 0) {
            lastChar = chars[chars.length - 2];
        }
        char tmp = chars[1];
        chars[1] = lastChar;
        if (chars[chars.length-1]%2==0)
            chars[chars.length-1] = tmp;
        if (chars[chars.length - 1] % 2 != 0) {
            for (int i = 2; i < chars.length; i++) {
                for (int j = 0; j < chars.length; j++) {
                    if (((i + 1) % 2 == 0) & (tmp != ' ')) {
                        char tmp2 = chars[i];
                        chars[i] = tmp;
                        tmp = tmp2;
                    }
                }
            }
        }
        return new String(chars);
    }
  • Вопрос задан
  • 340 просмотров
Решения вопроса 1
Mrrl
@Mrrl
Заводчик кардиганов
Как-нибудь так? Правда, это C#, но разница должна быть небольшая.

public static String moveLetters(String a) {
        int L=a.Length;
        char[] chars = new char[L];
        for(int x=0;x<L;x++) chars[x]=a[x==1 ? L-L%2-1 : x-2*(x%2)];
        return new String(chars);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MrBe Автор вопроса
На будущее, на случай, если кто-то не силен в тернарном операторе переписал для if...else
public static String moveLetters(String s) {
        int L = s.length();
        char[] chars = new char[L];
        int i = 0;
        for (int x = 0; x < L; x++) {
            if (x % 2 == 0) {
                i = x;
            } else {
                if (x == 1) {
                    i = L - L % 2 - 1;
                } else {
                    i = x - 2;
                }
            }
            chars[x] = s.toCharArray()[i];
        }
        return new String(chars);
    }


* для тех кто в C# не разбирается код из предыдущего ответа, только для Java

public static String moveLetters(String str) {
        int L = str.length();
        char[] chars = new char[L];
        for (int x = 0; x < L; x++) {
            chars[x] = str.toCharArray()[(x % 2 == 0) ? (x) : (x == 1) ? (L - L % 2 - 1) : (x - 2)];
        }
        return new String(chars);
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы