Как перемешать 2 строки

410
02 февраля 2017, 00:28

Почему массив arrayC запоминает только по одному элементу из каждого массива?
Я планировал перемешать 2 строки.

public static void mixString(String a, String b) {
    String[] arrayA = a.split("");
    String[] arrayB = b.split("");
    String[] arrayC = new String[a.length() + b.length()];
    for (int i = 0; i < arrayC.length - 1; i++) {
        getTurn();
        if (f) {
            for (int j = 0; j < arrayA.length; j++)
                arrayC[i] = arrayA[j];
        }
        else {
            for (int x = 0; x < arrayB.length; x++)
                arrayC[i] = arrayB[x];
        }
    }
}
public static boolean getTurn() {
    f = !f;
    return f;
}
Answer 1
public static void mixString(String a, String b) {
  char[] arrayC = new char[a.length() + b.length()];
  int idxA = 0;
  int idxB = 0;
  for (int i = 0; i < arrayC.length; i++) {
    if (idxB >= b.length() || (idxA < a.length() && getTurn()))
      arrayC[i] = a.charAt(idxA++);
    else
      arrayC[i] = b.charAt(idxB++);
  }
}
Answer 2

Разбивать строку на массив строк с помощью split для работы с конкретными символами строки является весьма неоптимальным вариантом. Для этого в классе String существует метод charAt(int index).

Для работы с набором символов в данном случае лучше воспользоваться массивом символов char[], а не массивом строк String[], состоящих из одного символа.

Для создания строки из массива символов существует метод String.valueOf(char[] data).

В итоге получается такой код:

public static String mixString(String a, String b)
{
    char[] resultChars = new char[a.length() + b.length()];
    for (int i = 0; i < resultChars.length; i++)
    {
        resultChars[i] = (i % 2 == 0) ? a.charAt(i / 2) : b.charAt(i / 2);
    }
    return String.valueOf(resultChars);
}
Answer 3

Написав

for (int j = 0; j<arrayA.length; j++)
    arrayC[i] = arrayA[j];

происходит выполнение цикла количество раз равное arrayA.length. При этом каждый элемент из массива arrayA кладется постоянно в одну и ту же ячейку arrayC[i]. В итоге когда цикл заканчивается в ячейке оказывается лишь последний элемент массива. И так постоянно.

Аналогично и с arrayB

READ ALSO
Как получить внешний IP при помощи Java

Как получить внешний IP при помощи Java

Пишу бот для Telegram, встал вопрос определения геолокации по IPКак я понял на Java это реализуется только с помощью запроса к какому либо серверу,...

354
Как поймать событие iframe location change?

Как поймать событие iframe location change?

Есть сайт, в нём есть iframe, в который подгружается другой сайтХочется подсветить BODY зелёным, когда в iframe полностью загрузился другой сайт,...

372
Сделать на CSS дугу

Сделать на CSS дугу

Как сделать дугу на CSS:

564
jQuery не видит данные формы

jQuery не видит данные формы

Использую webix UI, код JS:

353