Java 阵列滤波算法

Java 阵列滤波算法,java,algorithm,Java,Algorithm,我有两个String数组,如下所示。我想创建第三个字符串数组st3,如图所示 String[] st1 = {"apple1", "apple2", "apple3","apple4", "apple5","apple6","apple7", "apple8"}; String[] st2 = {"orange1", "orange2", "orange3","orange4", "orange5", "orange6","orange7", "orange8"}; // st3 = [ap

我有两个
String
数组,如下所示。我想创建第三个
字符串
数组
st3
,如图所示

String[] st1 = {"apple1", "apple2", "apple3","apple4", "apple5","apple6","apple7", "apple8"};

String[] st2 = {"orange1", "orange2", "orange3","orange4", "orange5", "orange6","orange7", "orange8"};

// st3 = [apple1,apple2,  orange1,orange2,
// apple3,apple4,  orange3,orange4,
// apple5,apple6,  orange5,orange6,
// apple7,apple8,  orange7,orange8]

String[] st3 = new String[st1.length *2];
int j = 0;

for (int i = 0; i < st1.length; i++) {
    String a = st1[i];
    String b = st1[i];

    st3[j] = a;
    j++;
    st3[j] = b;
    j++;


    // System.out.println(st3);
}
String[]st1={“apple1”、“apple2”、“apple3”、“apple4”、“apple5”、“apple6”、“apple7”、“apple8”};
字符串[]st2={“orange1”、“orange2”、“orange3”、“orange4”、“orange5”、“orange6”、“orange7”、“orange8”};
//st3=[apple1,apple2,orange1,orange2,
//apple3,apple4,orange3,orange4,
//apple5,apple6,橙色5,橙色6,
//苹果7,苹果8,橘子7,橘子8]
字符串[]st3=新字符串[st1.length*2];
int j=0;
for(int i=0;i

算法有什么帮助吗?

只需稍微进行位操作,您就可以这样做:

String[] st3 = new String[st1.length * 2];
for (int i = 0; i < st3.length; i++) {
    int j = i >> 1 & ~1 | i & 1;
    st3[i] = (i & 2) == 0 ? st1[j] : st2[j];
}
System.out.println(Arrays.toString(st3));
说明:

i
的位是
aaaaaa bc
,其中位1(
b
)指定从哪个数组获取值,而
aaaaaa c
指定该数组的索引

要检查位1是否为0:
(i&2)==0

要删除位1,您将值右移(
i>>1
=
aaaaaa b
),删除
b
值(
&~1
=
aaaaaa 0
),获取
c
值(
i&1
=
c
),并将它们组合起来(

运算符优先级不需要括号。

明确地说,应该是
((i>>1)和~1)|(i&1)

你的问题是什么?另请看,如果你能告诉我们什么不正常/这里应该有什么不同,那就更好了。你得到了什么输出?就你的问题而言,你想问什么并不十分清楚。请只标记你实际使用的编程语言。这看起来不像c#@shmosel抱歉,它有多个缺陷;应该是字符串b=st2[i];我发现已经给出的算法没有问题。。。我遗漏了什么吗?因为这个问题看起来像是学校的作业,我想看到OP把你的答案作为解决方案呈现出来@嘿,OP要求算法,这是一个伟大的(在我看来)。它是否使用OP应该知道的以外的构造是一个单独的问题,问题中没有列出任何约束。当然,这是问题的答案。我只是说这不是OP所希望的。