0

我们有一个随机长度和随机数的数组,例如。

[12, 2345, 232, 52, 24]. 

我们只想选择那些由二进制数定义的,例如。

5= 101 = [0, 0, 1, 0, 1] 

所以我想要得到的 Array 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]

有什么快速的方法吗?

谢谢

4

4 回答 4

3

使用 aBitSet可能有助于在此处进行转换intBitSet查看:BitSet to and from integer/long

这是使用链接中的类的快速破解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;
}

结果将是:

x = [12, 2345, 232, 52, 24]
b = 5 (i.e. 101 binary)
X = [0, 0, 232, 0, 24]

请注意,如果您想直接定义位,只需将它们设置在BitSet.

于 2013-09-30T08:30:04.703 回答
1

只是一个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;
}

只要确保各处的长度是一致的。

于 2013-09-30T08:32:07.500 回答
0

As this:

int i = 3;
int[] yourArray;
for (int i = 0; i < yourArray.length; i++) {
    yourArray[i] = yourArray[i] & i == i ? yourArray[i] : 0;
}
于 2013-09-30T08:36:59.980 回答
0

尝试这个:

    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));
于 2013-09-30T09:15:30.760 回答