我试图将一个布尔数组移到左边,根据用户想要移动的次数,但我不知道我是否可以移动一个数组。我知道我可以移位整数,所以我应该将布尔数组转换为int,移位,然后将其转换回数组?对于小结果来说,这看起来似乎很多。如果有人有解决方案,请帮助!!!!
答案 0 :(得分:2)
我假设你的意思是假装一个布尔值数组是一个二进制值,就像一个int,然后将它移位到左边的右边。
查看int值为1,会发生这种情况
int c = 1;
c <<= 1; // 10
c = 1;
c >>= 1; //0
为了模仿这种行为,假设我有一个布尔值数组(1/0),我推断它代表了一个数字中的位。
我就是这样做的....
我使用ArrayDeque作为复合对象创建自己的自定义类,然后添加移位功能。
import java.util.Iterator;
import java.lang.Boolean;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.lang.Integer;
public class BooleanArray{
ArrayDeque<Boolean> number;
public BooleanArray(Boolean [] nums){
number = new ArrayDeque<Boolean>(Arrays.asList(nums));
}
// >>
public void shiftRight(int times){
while(times-- > 0){
number.removeFirst();
number.addLast(false);
}
}
// <<
public void shiftLeft(int times){
while(times-- > 0) number.addFirst(false);
}
public String toString(){
Iterator<Boolean> it = number.descendingIterator();
String str = "";
while(it.hasNext()){
if(it.next()) str += "1";
else str += "0";
}
return str;
}
public static void main(String [] args){
int c = 1;
System.out.println(Integer.toBinaryString(c));
c <<= 1;
System.out.println(Integer.toBinaryString(c));
c = 1;
System.out.println(Integer.toBinaryString(c));
c >>= 1;
System.out.println(Integer.toBinaryString(c));
System.out.println("==========");
Boolean [] cArr = {true};
BooleanArray arr = new BooleanArray(cArr);
System.out.println(arr.toString());
arr.shiftLeft(1);
System.out.println(arr.toString());
arr = new BooleanArray(cArr);
System.out.println(arr.toString());
arr.shiftRight(1);
System.out.println(arr.toString());
}
}
答案 1 :(得分:0)
直接的解决方案是这样的:
package snippet;
public class BooleanArrayShift {
public static void main(String[] args) {
boolean[] x = new boolean[] { true, true, true, true, true };
for (int i = 0; i <= x.length; i++) {
boolean[] result = shiftRight(x, i);
System.out.print(i + " ");
printBooleanArray(result);
}
for (int i = 0; i <= x.length; i++) {
boolean[] result = shiftLeft(x, i);
System.out.print(i + " ");
printBooleanArray(result);
}
}
private static void printBooleanArray(boolean[] result) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (boolean b : result) {
sb.append(b).append(",");
}
if (result.length > 0)
sb.setLength(sb.length() - 1);
sb.append("]");
System.out.println(sb);
}
private static boolean[] shiftRight(boolean[] bs, int n) {
boolean[] result = new boolean[bs.length];
n = Math.min(n, bs.length);
System.arraycopy(bs, 0, result, n, bs.length - n);
return result;
}
private static boolean[] shiftLeft(boolean[] bs, int n) {
boolean[] result = new boolean[bs.length];
n = Math.min(n, bs.length);
System.arraycopy(bs, n, result, 0, bs.length - n);
return result;
}
}