Вам нужен вложенный цикл for. Вы добавляете span
-элементы из arr1
и arr2
одновременно, причем span
увеличивается с 1. Этот код работает, только если N
является треугольным числом ; в противном случае последний элемент будет «неполным», и на данный момент этот код не обрабатывает его (и выдает ArrayIndexOutOfBoundsException
).
String[] arr1 = { "a1", "a2", "a3", "a4", "a5", "a6" };
String[] arr2 = { "b1", "b2", "b3", "b4", "b5", "b6" };
int N = arr1.length;
// here we assume that N == arr2.length, and N is triangular
StringBuilder sb = new StringBuilder();
for (int start = 0, span = 1; ; span++) {
for (int i = 0; i < span; i++) {
sb.append(arr1[start + i]);
}
for (int i = 0; i < span; i++) {
sb.append(arr2[start + i]);
}
start += span;
if (start == N) break;
sb.append(",");
}
System.out.println(sb);
// prints "a1b1,a2a3b2b3,a4a5a6b4b5b6"
Логика
Чтобы понять только основную логику, возможно, мы можем начать с чего-то более простого:
int start = 0;
int N = 8;
int span = 1;
while (start < N) {
System.out.println("span = " + span);
for (int i = 0; i < span; i++) {
System.out.println(start + i);
}
start += span;
span++;
}
Это печатает:
span = 1
0
span = 2
1
2
span = 3
3
4
5
span = 4
6
7
8
9
Вы должны понимать, как работает структура вложенного цикла. Опять же, обратите внимание, что хотя N = 8
(который не является треугольным числом), цикл фактически печатает 10 чисел (который является треугольным числом). Сначала вы можете поработать над этим фрагментом, попытаться изменить его так, чтобы он только печатал N
числа независимо от того, является ли он треугольным числом, а затем адаптировал эту же технику к исходной задаче.
Вы можете также поработать над этим фрагментом, чтобы напечатать, скажем, "next!"
перед каждой span
строкой, кроме первой. Это было бы той же логикой, чтобы включить запятую в исходную задачу.
Удачи!