簡體   English   中英

Java:有什么方法可以在布爾數組上實現移位? 如果是這樣,我將如何去做?

[英]Java: Is there any way to implement shift on a boolean array? If so, how would I go about doing this?

我正在嘗試根據用戶希望將數字移位多少次將布爾數組向左移位,但是我不知道是否可以移位數組。 我知道我可以移位整數,所以我應該將布爾數組轉換為整數,將其移位,然后再將其轉換回數組嗎? 似乎需要付出很多努力才能取得小的結果。 如果有人有解決方案,請幫助!!!!

我假設您的意思是假裝布爾值數組是一個二進制值(如int),然后將其向左移右移。

查看int值1,會發生這種情況

    int c = 1; 
    c <<= 1; // 10

    c = 1;
    c >>= 1; //0

為了模擬這種行為,假設我有一個布爾值(1/0)數組,並且我推斷它代表數字中的位。

這就是我要做的。

我將使用ArrayDeque作為復合對象創建自己的自定義類,然后添加shift功能。

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());

  }

}

一個簡單的解決方案是這樣的:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM