java数组操作

时间:2010-04-24 04:47:10

标签: java

我是java的初学者。我想要小程序的逻辑。

我有两个数组

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

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

我希望字符串为a1b1,a2a3b2b3,a4a5a6b4b5b6,....所以最多n

请告诉我逻辑是什么。

4 个答案:

答案 0 :(得分:3)

您需要一个嵌套的for循环。您追加span - 来自arr1arr2的元素,span从1开始增加。此代码仅在N为{{3}时有效}};否则最后一个元素将是“不完整的”,截至目前此代码不处理它(并将抛出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,但第一行除外。在原始问题中包含逗号也是一样的逻辑。

祝你好运!

答案 1 :(得分:3)

这样可行。

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。最后删除最后一个逗号。

编辑:根据polygenelubricants的要求提供完整的答案。上面的循环也有所改变。

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]);
    }
}

答案 2 :(得分:1)

使用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();

}

答案 3 :(得分:0)

这样的事情应该有用......虽然没有经过测试!

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;
    }
}