Java:有没有办法在布尔数组上实现shift?如果是这样,我该怎么做呢?

时间:2015-08-05 03:48:19

标签: java arrays boolean shift

我试图将一个布尔数组移到左边,根据用户想要移动的次数,但我不知道我是否可以移动一个数组。我知道我可以移位整数,所以我应该将布尔数组转换为int,移位,然后将其转换回数组?对于小结果来说,这看起来似乎很多。如果有人有解决方案,请帮助!!!!

2 个答案:

答案 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;
    }
}