我是java的初学者。我想要小程序的逻辑。
我有两个数组
array = {a1,a2,a3,a4,a5,,,,,,,,,an}
和
array2 = {b1,b2,b3,b4,,,,,,,,,,,bn}
我希望字符串为a1b1,a2a3b2b3,a4a5a6b4b5b6,....所以最多n
请告诉我逻辑是什么。
答案 0 :(得分:3)
您需要一个嵌套的for循环。您追加span
- 来自arr1
和arr2
的元素,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;
}
}