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转换,所以我在回答中包含了一个。对不起。那是个打字错误。因为当时我没有任何真实的测试数据,所以我一直在忙着编这些数字。