我在获取二进制文件方面遇到了麻烦。我不知道出了什么问题。二进制数总是以乱码结尾。还有一些像new int[31]
这样的东西来自HW,但我无法绕过来打印实际的二进制文件。
public class DectoBinary {
public static void main(String[]args) {
Scanner CONSOLE = new Scanner(System.in);
System.out.print("Please enter a nonnegative integer: ");
int value = CONSOLE.nextInt();
while (value < 0) {
System.out.print("number outside range.");
System.out.print
("Please enter a nonnegative interger more than 0: ");
value = CONSOLE.nextInt();
}
int[] intArray = new int[31];
decimalToBinary(value, intArray);
System.out.println(value + "" + intArray);
}
public static int[] decimalToBinary(int value, int[]intArray) {
int i = 0;
while (value != 0) {
if (value % 2 == 1)
intArray[i] = 1;
else
intArray[i] = 0;
value /= 2;
i++;
}
return intArray;
}
}
答案 0 :(得分:3)
我认为错误就在这一行:
System.out.println(value + "" + intArray);
你不能打印这样的整数数组:你应该将它转换为字符串,或者写一个逐位打印数组的循环:
for (int i : inrArray) {
System.out.print(intArray[i]);
}
System.out.println();
您也不需要传入输出数组:您可以在函数内创建它。
public static int[] decimalToBinary(int value) {
int count = 1;
int tmp = value;
while (tmp != 0) {
tmp /= 2;
count++;
}
int[] intArray = new int[count];
// Do the conversion here...
return intArray;
}
答案 1 :(得分:1)
答案 2 :(得分:1)
实际上,这是使用BigInteger
在java中获取二进制数的一种非常简单的方法public String dectoBin(int num){
String s = ""+num;
BigInteger bi = new BigInteger(s);
String bin = bi.toString(2);
return bin
}
BigInteger.toString(2)
返回存储在括号内指定的数字基数上的数字。是解决这个问题的一种非常简单的方法。
答案 3 :(得分:0)
System.out.println(value +“”+ intArray); 'intArray'是数组的地址,因此,如果你想获得实际的二进制文件,你可以使用Arrays.toString(intArray)
答案 4 :(得分:0)
作为dasblinkenlight,您需要逐项打印数组。如果你想要一个不错的选择,你可以使用值mod 2的递归打印(模2给你1或0)
/** print directly*/
public static void decimalToBinary(int value) {
if(value > 1){
System.out.print(decimalToBinary(value/2) + "" + (value%2));
/**recursion with implicit cast to string*/
} else {
System.out.print( (value==0)?"":"1");
}
}
适用于任何Base
答案 5 :(得分:0)
实际上要打印数组,因为数组中的所有插槽都初始化为0,您需要检测第一个插槽的开始位置,所以。 你需要更换
System.out.println(value + "" + intArray);
有这样的东西;
System.out.println(vale + " ");
boolean sw = false;
for(int i=0;i<intArray.length;i++){
if(!sw)
sw = (intArray[i]==1);//This will detect when the first 1 appears
if(sw)
System.out.println(intArray[1]); //This will print when the sw changes to true everything that comes after
}
答案 6 :(得分:0)
这是一个转换十进制数的程序。二进制。
import java.util.Scanner;
public class decimalToBinary {
static int howManyTerms (int n) {
int term = 0;
while (n != 0) {
term ++;
n /= 2;
}
return term;
}
static String revArrayofBin2Str (int[] Array) {
String ret = "";
for (int i = Array.length-1; i >= 0; i--)
ret += Integer.toString(Array[i]);
return ret;
}
public static void main (String[] args) {
Scanner sc=new Scanner (System.in);
System.out.print ("Enter any no.: ");
int num = sc.nextInt();
int[] bin = new int[howManyTerms (num)];
int dup = num, el = -1;
while (dup != 0) {
int rem = dup % 2;
bin [++el] = rem;
dup /= 2;
}
String d2b = revArrayofBin2Str(bin);
System.out.println("Binary of " + num + " is: " + d2b);
}
}
答案 7 :(得分:-1)
这是使用原始类型int的十进制到二进制的简单java代码,希望它应该对初学者有帮助。
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class DtoB {
public static void main(String[] args) {
try { // for Exception handling of taking input from user.
System.out.println("Please enter a number");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
int x = Integer.parseInt(input);
int bin = 0;
int p = 1;
while (x > 0) {
int r = x % 2;
bin = (r * p) + bin;
x = x / 2;
p *= 10;
}
System.out.println("Binary of " + input + " is = " + bin);
} catch (Exception e) {
System.out.println("Please enter a valid decimal number.");
System.exit(1);
e.printStackTrace();
}
}
}