[英]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.