Почему массив 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;
}
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++);
}
}
Разбивать строку на массив строк с помощью 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);
}
Написав
for (int j = 0; j<arrayA.length; j++)
arrayC[i] = arrayA[j];
происходит выполнение цикла количество раз равное arrayA.length. При этом каждый элемент из массива arrayA кладется постоянно в одну и ту же ячейку arrayC[i]. В итоге когда цикл заканчивается в ячейке оказывается лишь последний элемент массива. И так постоянно.
Аналогично и с arrayB
Продвижение своими сайтами как стратегия роста и независимости