Java 二进制数组的数组选择

Java 二进制数组的数组选择,java,arrays,Java,Arrays,我们有一个随机长度和随机数的数组 [12, 2345, 232, 52, 24]. 我们只想选择那些由二进制数定义的 5= 101 = [0, 0, 1, 0, 1] 所以我想得到的数组X是 [0, 0, 232, 0, 24]; 范例 int[] x = {12, 2345, 232, 52, 24}; int b = 5; int[] X = eliminate(x, b); // x = [12, 2345, 232, 52, 24] b = [ 0, 0, 1,

我们有一个随机长度和随机数的数组

[12, 2345, 232, 52, 24]. 
我们只想选择那些由二进制数定义的

5= 101 = [0, 0, 1, 0, 1] 
所以我想得到的数组X是

[0, 0, 232, 0, 24];
范例

int[] x = {12, 2345, 232, 52, 24};
int b = 5;
int[] X = eliminate(x, b);

//
x = [12, 2345, 232, 52, 24]
b = [ 0,    0,   1,  0,  1]
X = [ 0,    0, 232,  0, 24]
有什么快速的方法吗


感谢使用
位集
可能会有所帮助,有关
int
位集
之间的转换,请查看此处:

下面是使用链接中的
Bits
类进行的快速破解:

public static int[] eliminate( int[] x, int b) {
  BitSet bs = Bits.convert( b );
  int[] X = new int[x.length];

  for( int i = 0; i < x.length; i++){
    if( bs.get( x.length - (i + 1) ) ){
      X[i] = x[i];
    }
    else {
      X[i] = 0;
    }
  }

  return X;
}

请注意,如果要直接定义位,只需使用
位集
位集

中设置位即可,有关
int
位集
之间的转换,请查看此处:

下面是使用链接中的
Bits
类进行的快速破解:

public static int[] eliminate( int[] x, int b) {
  BitSet bs = Bits.convert( b );
  int[] X = new int[x.length];

  for( int i = 0; i < x.length; i++){
    if( bs.get( x.length - (i + 1) ) ){
      X[i] = x[i];
    }
    else {
      X[i] = 0;
    }
  }

  return X;
}
请注意,如果您想直接定义位,您可以在
位集中设置它们

只是一个for循环

int[] newarray = new int[length];
for(int i = 0; i < length; i++)
{
    if(b[i]==1)
       newarray[i] = x[i];
    else
       newarray[i] = 0;
}
int[]newarray=newint[length];
for(int i=0;i
只要确保每个地方的长度都是一致的。

只是一个for循环

int[] newarray = new int[length];
for(int i = 0; i < length; i++)
{
    if(b[i]==1)
       newarray[i] = x[i];
    else
       newarray[i] = 0;
}
int[]newarray=newint[length];
for(int i=0;i
只要确保各处的长度一致即可。

如下所示:

int i = 3;
int[] yourArray;
for (int i = 0; i < yourArray.length; i++) {
    yourArray[i] = yourArray[i] & i == i ? yourArray[i] : 0;
}
inti=3;
int[]数组;
for(int i=0;i
如下所示:

int i = 3;
int[] yourArray;
for (int i = 0; i < yourArray.length; i++) {
    yourArray[i] = yourArray[i] & i == i ? yourArray[i] : 0;
}
inti=3;
int[]数组;
for(int i=0;i
试试这个:

    String binSt = Integer.toBinaryString(5); // has no leading 0s
    byte[] x = {12, 21, 21, 52, 24};
    byte[] xResult = new byte[x.length];
    int offset = x.length - binSt.length(); // to simulate leading 0s
    for (int i = 0; i < xResult.length; i++) {
        xResult[i] = (i-offset < binSt.length() && i-offset >= 0 && binSt.charAt(i-offset) == '1' ? x[i] : 0);
    }
    System.out.println(Arrays.toString(xResult));
String binSt=Integer.toBinaryString(5);//没有前导0
字节[]x={12,21,21,52,24};
字节[]xResult=新字节[x.length];
int offset=x.length-binSt.length();//模拟前导0
对于(int i=0;i=0&&binSt.charAt(i-offset)='1'?x[i]:0);
}
System.out.println(Arrays.toString(xResult));
试试这个:

    String binSt = Integer.toBinaryString(5); // has no leading 0s
    byte[] x = {12, 21, 21, 52, 24};
    byte[] xResult = new byte[x.length];
    int offset = x.length - binSt.length(); // to simulate leading 0s
    for (int i = 0; i < xResult.length; i++) {
        xResult[i] = (i-offset < binSt.length() && i-offset >= 0 && binSt.charAt(i-offset) == '1' ? x[i] : 0);
    }
    System.out.println(Arrays.toString(xResult));
String binSt=Integer.toBinaryString(5);//没有前导0
字节[]x={12,21,21,52,24};
字节[]xResult=新字节[x.length];
int offset=x.length-binSt.length();//模拟前导0
对于(int i=0;i=0&&binSt.charAt(i-offset)='1'?x[i]:0);
}
System.out.println(Arrays.toString(xResult));

Btw,3不是
101
,而是
11
101
应该是5。@Thomas我更正了,这看起来像是个打字错误。@Mazmart我不确定您是否也需要int->bitarray转换,所以我在回答中包含了一个。对不起。那是个打字错误。由于当时我没有任何真实的测试数字,所以我一直在忙着编数字。顺便说一句,3不是
101
,而是
11
101
应该是5。@Thomas我纠正了这一点,看起来像是输入错误。@Mazmart我不确定您是否也需要int->bitarray转换,所以我在回答中包含了一个。对不起。那是个打字错误。因为当时我没有任何真实的测试数据,所以我一直在忙着编这些数字。