将位存储在 int 数组中
Storing bits in array of int
我需要创建一个方法
private static int[] inBinary(int number)
那 return 是一个数字的二进制表示并将其存储在一个数组中,没有任何额外的零。
示例:如果我有十进制数 2,它应该 return 其二进制值 10
而不是 0010
或 00000010
。
问题是我的代码(对于 dec 数字 2)returns 01(当我将其转换为 void 方法并仅打印 binary[i] 时),而不是 10。我的问题是,如何通过 "result" 变量 "reverse" while 循环的函数,使其 returns 10 而不是 01 以及如何将其全部存储在数组中。这是我目前所拥有的:
public static int[] inBinary(int number){
if(number < 0){
throw new IllegalArgumentException("Negative numbers not possible!");
}
int elements = 1; int result = 0; int[] binary = new int[elements];
while(number != 0){
elements++;
result = number % 2;
number /= 2;
for(int i = 0; i < binary.length; i++){
binary[i] = result;
}
}
return binary;
}
public static void main (String[] args){
System.out.println(inBinary(2));
}
public static int[] shiftbits(int[] array){
int[] shiftedArray = new int[array.length];
int index = array.length - 1;
for (int i = 0; i < array.length; i++) {
shiftedArray[i] = array[index];
index--;
}
return shiftedArray;
}
我尽力帮你解决了;我在某些部分使用了util.List
,因为我们不知道结果二进制数有多长来为其定义一个数组。 reverse
方法用于反转二进制数组并删除多余的 zeors;这是完整的代码:
public static void main(final String[] args) {
System.out.println(reverse(inBinary(2)));
}
public static Integer[] inBinary(int number) {
if (number < 0) {
throw new IllegalArgumentException("Negative numbers not possible!");
}
int elements = 1;
int result = 0;
final List<Integer> binaryList = new ArrayList<Integer>();
while (number != 0) {
elements++;
result = number % 2;
number /= 2;
binaryList.add(new Integer(result));
}
final Integer[] binary = new Integer[binaryList.size()];
binaryList.toArray(binary);
return binary;
}
static String reverse(final Integer arr[]) {
boolean flag = false;
String tmp = "";
for (int i = arr.length - 1; i >= 0; i--) {
if (arr[i].equals(new Integer(1)) && flag == false) {
flag = true;
}
if (flag == true) {
tmp += arr[i];
}
}
return tmp;
}
这是一个自制的解决方案。它的效率有点低,但是,它可以正常工作。另外,我可以解释一下:
public static int[] inBinary(int number) {
// this will store the full binary array
int[] binary = new int[Integer.SIZE];
for (int i = Integer.SIZE - 1; 0 <= i; i--) {
binary[i] = number % 2;
// one shift to the right, basically divides with two
// it's okay to change the incoming parameter as it's not a reference
number = number >> 1;
}
// then we count the leading zeros
int startIndex = 0;
while (binary[startIndex] != 1) {
startIndex++;
}
// Arrays.copyOfRange() is prohibited so we have to do it manually:
// We allocate a shorter array
int[] result = new int[Integer.SIZE - startIndex];
// and copy the related numbers.
for (int i = 0; i < Integer.SIZE - startIndex; i++) {
result[i] = binary[startIndex + i];
}
return result;
}
您的程序的一个非常简化的工作版本:
public static void inBinary(int number){
if(number < 0){
throw new IllegalArgumentException("Negative numbers not possible!");
}
//create an empty list and fill binary digits in it
List<Integer> binaryDigitsList = new ArrayList<Integer>();
while(number != 0){
int digit=number%2;
binaryDigitsList.add(digit);
number=number/2;
}
//now reverse the list and fill it in array
int[] binaryArr = new int[binaryDigitsList.size()];
for(int k=binaryDigitsList.size()-1, index=0; k>=0 ; k--){
binaryArr[index]=binaryDigitsList.get(k);
index++;
}
//print contents of array
for(int index=0;index<binaryArr.length;index++)
System.out.println("BinaryArray["+index+"] = "+binaryArr[index]);
}
Assuming you want to use an array. here an example
public class ExempleDecimalBinary2 {
public static void main(String a[]){
ExempleDecimalBinary2 obj = new ExempleDecimalBinary2();
System.out.println("\nBinary for 2: ");
obj.inBinary(2);
System.out.println("\nBinary for 124: ");
obj.inBinary(124);
System.out.println("\nBinary for 45: ");
obj.inBinary(45);
System.out.println("\nBinary for 2147483647: ");
obj.inBinary(2147483647);
}
public static void inBinary(int number){
int binary[] = new int[1];
int index = 0;
while(number > 0){
binary=(int[]) resizeArray (binary, index+1);
binary[index++] = number%2;
number = number/2;
}
for(int i = index-1;i >= 0;i--){
System.out.print(binary[i]);
}
}
private static Object resizeArray (Object oldArray, int newSize) {
int oldSize = java.lang.reflect.Array.getLength(oldArray);
Class elementType = oldArray.getClass().getComponentType();
Object newArray = java.lang.reflect.Array.newInstance(
elementType, newSize);
int preserveLength = Math.min(oldSize, newSize);
if (preserveLength > 0)
System.arraycopy(oldArray, 0, newArray, 0, preserveLength);
return newArray; }
}
我需要创建一个方法
private static int[] inBinary(int number)
那 return 是一个数字的二进制表示并将其存储在一个数组中,没有任何额外的零。
示例:如果我有十进制数 2,它应该 return 其二进制值 10
而不是 0010
或 00000010
。
问题是我的代码(对于 dec 数字 2)returns 01(当我将其转换为 void 方法并仅打印 binary[i] 时),而不是 10。我的问题是,如何通过 "result" 变量 "reverse" while 循环的函数,使其 returns 10 而不是 01 以及如何将其全部存储在数组中。这是我目前所拥有的:
public static int[] inBinary(int number){
if(number < 0){
throw new IllegalArgumentException("Negative numbers not possible!");
}
int elements = 1; int result = 0; int[] binary = new int[elements];
while(number != 0){
elements++;
result = number % 2;
number /= 2;
for(int i = 0; i < binary.length; i++){
binary[i] = result;
}
}
return binary;
}
public static void main (String[] args){
System.out.println(inBinary(2));
}
public static int[] shiftbits(int[] array){
int[] shiftedArray = new int[array.length];
int index = array.length - 1;
for (int i = 0; i < array.length; i++) {
shiftedArray[i] = array[index];
index--;
}
return shiftedArray;
}
我尽力帮你解决了;我在某些部分使用了util.List
,因为我们不知道结果二进制数有多长来为其定义一个数组。 reverse
方法用于反转二进制数组并删除多余的 zeors;这是完整的代码:
public static void main(final String[] args) {
System.out.println(reverse(inBinary(2)));
}
public static Integer[] inBinary(int number) {
if (number < 0) {
throw new IllegalArgumentException("Negative numbers not possible!");
}
int elements = 1;
int result = 0;
final List<Integer> binaryList = new ArrayList<Integer>();
while (number != 0) {
elements++;
result = number % 2;
number /= 2;
binaryList.add(new Integer(result));
}
final Integer[] binary = new Integer[binaryList.size()];
binaryList.toArray(binary);
return binary;
}
static String reverse(final Integer arr[]) {
boolean flag = false;
String tmp = "";
for (int i = arr.length - 1; i >= 0; i--) {
if (arr[i].equals(new Integer(1)) && flag == false) {
flag = true;
}
if (flag == true) {
tmp += arr[i];
}
}
return tmp;
}
这是一个自制的解决方案。它的效率有点低,但是,它可以正常工作。另外,我可以解释一下:
public static int[] inBinary(int number) {
// this will store the full binary array
int[] binary = new int[Integer.SIZE];
for (int i = Integer.SIZE - 1; 0 <= i; i--) {
binary[i] = number % 2;
// one shift to the right, basically divides with two
// it's okay to change the incoming parameter as it's not a reference
number = number >> 1;
}
// then we count the leading zeros
int startIndex = 0;
while (binary[startIndex] != 1) {
startIndex++;
}
// Arrays.copyOfRange() is prohibited so we have to do it manually:
// We allocate a shorter array
int[] result = new int[Integer.SIZE - startIndex];
// and copy the related numbers.
for (int i = 0; i < Integer.SIZE - startIndex; i++) {
result[i] = binary[startIndex + i];
}
return result;
}
您的程序的一个非常简化的工作版本:
public static void inBinary(int number){
if(number < 0){
throw new IllegalArgumentException("Negative numbers not possible!");
}
//create an empty list and fill binary digits in it
List<Integer> binaryDigitsList = new ArrayList<Integer>();
while(number != 0){
int digit=number%2;
binaryDigitsList.add(digit);
number=number/2;
}
//now reverse the list and fill it in array
int[] binaryArr = new int[binaryDigitsList.size()];
for(int k=binaryDigitsList.size()-1, index=0; k>=0 ; k--){
binaryArr[index]=binaryDigitsList.get(k);
index++;
}
//print contents of array
for(int index=0;index<binaryArr.length;index++)
System.out.println("BinaryArray["+index+"] = "+binaryArr[index]);
}
Assuming you want to use an array. here an example
public class ExempleDecimalBinary2 {
public static void main(String a[]){
ExempleDecimalBinary2 obj = new ExempleDecimalBinary2();
System.out.println("\nBinary for 2: ");
obj.inBinary(2);
System.out.println("\nBinary for 124: ");
obj.inBinary(124);
System.out.println("\nBinary for 45: ");
obj.inBinary(45);
System.out.println("\nBinary for 2147483647: ");
obj.inBinary(2147483647);
}
public static void inBinary(int number){
int binary[] = new int[1];
int index = 0;
while(number > 0){
binary=(int[]) resizeArray (binary, index+1);
binary[index++] = number%2;
number = number/2;
}
for(int i = index-1;i >= 0;i--){
System.out.print(binary[i]);
}
}
private static Object resizeArray (Object oldArray, int newSize) {
int oldSize = java.lang.reflect.Array.getLength(oldArray);
Class elementType = oldArray.getClass().getComponentType();
Object newArray = java.lang.reflect.Array.newInstance(
elementType, newSize);
int preserveLength = Math.min(oldSize, newSize);
if (preserveLength > 0)
System.arraycopy(oldArray, 0, newArray, 0, preserveLength);
return newArray; }
}