манипулирование массивом Java - PullRequest
2 голосов
/ 24 апреля 2010

Я новичок в Java. Я хочу логику маленькой программы.

У меня есть два массива

array = {a1,a2,a3,a4,a5,,,,,,,,,an}

и

array2 = {b1,b2,b3,b4,,,,,,,,,,,bn}

Я хочу строку как a1b1, a2a3b2b3, a4a5a6b4b5b6, .... так далее до n

Пожалуйста, скажите мне, какова будет логика.

Ответы [ 4 ]

3 голосов
/ 24 апреля 2010

Вам нужен вложенный цикл 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 строкой, кроме первой. Это было бы той же логикой, чтобы включить запятую в исходную задачу.

Удачи!

3 голосов
/ 24 апреля 2010

Это будет работать.

int length = 1;
for (int start = 0; start < n; start += length, length++;) {
   build(builder, a1, start, length);
   build(builder, a2, start, length);
   if (start + length < n) {
       builder.append(",");
   }
}

Метод build(StringBuilder builder, int[] a, int start, int end) должен быть легко написать. Этот метод добавляет a[start] к a[end] проверке end < a.length. В конце удалите последнюю запятую.

РЕДАКТИРОВАТЬ : в соответствии с запросом полигенных смазочных материалов, дающим полный ответ Выше петля также была немного изменена.

private void build(StringBuilder sb, int[] a, int start, int length) {
    for (int i = start; i < length && i < a.length - start; i++;) {
        sb.append(a[i]);
    }
}
1 голос
/ 24 апреля 2010

Используйте цикл for и StringBuilder экземпляр.

String getHomework(int[] array, int[] array2){
    final int n = array.length; //assumes len array 1== len array2
    StringBuilder builder = new StringBuilder();

    for (int i=0;i<n-1;i++){
       builder.append(array[i]);
       builder.append(array2[i]);
       builder.append(",");
    }

    builder.append(array[n-1]);
    builder.append(array2[n-1]);

    return builder.toString();

}

0 голосов
/ 24 апреля 2010

Что-то вроде этого должно работать ... хотя не проверял!

arr1 = {a11, a12, ..., a1n};
arr2 = {a21, a22, ..., a2n};

StringBuilder builder = new StringBuilder();

int index = 0;
for (int i = 1; true; i++) {
    for (int j = 0; j < i; j++) {
        builder.append("" + arr1[index + j]);
    }
    for (int j = 0; j < i; j++) {
        builder.append("" + arr2[index++]);
    }
    if (index < n - 1) {
        builder.append(",");
    } else {
        break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...