Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java打印二进制数的十进制等价物_Java_Binary_Decimal - Fatal编程技术网

用java打印二进制数的十进制等价物

用java打印二进制数的十进制等价物,java,binary,decimal,Java,Binary,Decimal,我的代码是打印与用户输入的二进制数相等的十进制数 import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner in=new Scanner(System.in); System.out.print("Enter a binary integer: "); int b=in.nextInt();

我的代码是打印与用户输入的二进制数相等的十进制数

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.print("Enter a binary integer: ");
        int b=in.nextInt();
        int digits=1;
        int q=b;
        //determine the number of digits
        while(q/10>=1){     
            ++digits;
            q/=10;
        }
        System.out.println(digits);
        int decimal=0;
        int i=0;
        //pick off the binary number's digits and calculate the decimal equivalent
        while(i<=digits-1){
            decimal+=b/Math.pow(10,i)%10*Math.pow(2,i);
            i++;
        }           
        System.out.println(decimal);

    }

}
import java.util.Scanner;
公开课考试{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
System.out.print(“输入二进制整数:”);
int b=in.nextInt();
整数位数=1;
int q=b;
//确定位数
而(q/10>=1){
++数字;
q/=10;
}
系统输出打印项次(位数);
整数小数=0;
int i=0;
//选取二进制数的数字并计算十进制等效数
而(i尝试使用:

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.print("Enter a binary integer: ");
        int b=in.nextInt();
        int answer = Integer.parseInt(in.nextInt() + "", 2);
        System.out.println("The number is " + answer + ".");
    }
}

2代表基数2。

问题是
Math.pow
返回一个浮点数,你在做浮点计算,你认为你在做整数计算。当
i
为4时,你计算

b/Math.pow(10,i)%10*Math.pow(2,i);
计算如下:

b = 11001
b / Math.pow(10,i) = b / 10000 = 1.1001 (not 1)
1.1001 % 10 = 1.1001
1.1001 * Math.pow(2,i) = 1.1001 * 16 = 17.6016 (not 16)
当您将其添加到
十进制
时,它将转换为
(int)
。它将最后一个值截断为17,但为时已晚


Math.pow
结果转换为
(int)
将使其工作。但无论如何,这不是正确的方法。如果您想自己学习如何操作而不是使用
parseInt
,最好将数字作为
字符串输入(请参阅我前面的评论),然后你就不必担心把这些位取为十进制数字或10的幂。即使使用你的方法,而不是
Math.pow
,在每个循环iter中保留
powerOf10
powerOf2
整数变量也会更简单用法。

如果你想让用户输入一个二进制数,你不应该要求一个整数;
字符串更合适。首先,要求一个整数将你限制在10位以内,因为最大的十进制整数是10位。其次,你不能将它推广到十六进制。谢谢你的解释。我已经解释过了学习了很多…顺便说一句,如何使用字符串输入?使用
charAt
访问每个字符。最简单的方法是保持一个连续的总和。从左到右查看字符串。对于每个
'0'
的字符,将当前总和加倍;如果是
'1'
,则将当前总和加倍并加1。其他任何内容都是错误。同样的原理也适用于任何基数:将当前值乘以基数,然后将每个数字的值相加,从左到右。