Java 二进制到十进制计算器输入不匹配异常

Java 二进制到十进制计算器输入不匹配异常,java,inputmismatchexception,Java,Inputmismatchexception,我的目标是创建一个简单的二进制到十进制计算器。首先让用户输入他们试图计算的二进制值的字符串,然后使用该字符串的长度来运行for循环(如下面的代码所示)。计算器似乎工作正常,但当用户输入的二进制数(全部为1)超过20位时失败。我收到一个java.util.InputMismatchException错误,我不知道如何修复它 public class Main { public static void main(String[] args) { Scanner scan =

我的目标是创建一个简单的二进制到十进制计算器。首先让用户输入他们试图计算的二进制值的字符串,然后使用该字符串的长度来运行for循环(如下面的代码所示)。计算器似乎工作正常,但当用户输入的二进制数(全部为1)超过20位时失败。我收到一个java.util.InputMismatchException错误,我不知道如何修复它

public class Main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Please enter a binary number to convert to decimal: ");
        long binaryNum = scan.nextLong();
        System.out.println(binaryConverter(binaryNum));
        scan.close();

}

    public static long binaryConverter(long binaryNum) {
        String binaryString = Long.toString(binaryNum);
        long decimalValue = 0;
        for(int i = 0; i < binaryString.length(); i++) {
            if((binaryNum%10) == 0) {
                binaryNum = binaryNum/10;
            } else if((binaryNum%10) == 1) {
                decimalValue += Math.pow(2, i);
                binaryNum = binaryNum/10;
            } else {
                System.out.println("This isn't a binary number. Please try again.");
                break;
            }
        }   
        return decimalValue;
}
}
公共类主{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“请输入一个二进制数以转换为十进制:”);
long binaryNum=scan.nextLong();
System.out.println(二进制转换器(binaryNum));
scan.close();
}
公共静态长二进制转换器(长二进制数){
String binaryString=Long.toString(binaryNum);
长小数=0;
对于(int i=0;i
如果我理解正确,您总是希望将二进制输入转换为十进制值。一个非常简单的解决方案如下所示:

public static void main(String[] args) {
  Scanner scan = new Scanner(System.in);
  System.out.println("Please enter a binary number to convert to decimal: ");
  final String input = scan.next();
  System.out.println(Integer.parseInt(input, 2));
  scan.close();
}

如果您对Integer.parseInt的java源代码感兴趣,请查看它的工作原理。

使用scanner.nextLong(2),其中2是基数。然后,您将读取实际的二进制数

long number=scanner.nextLong(2);
系统输出打印项次(编号);
产生

144115188075855871
输入

111111111111111111111111111111111111111111111111111111111

可能重复的
Long
不能超过19个数字不要使用
nextLong()
然后
Long.toString()
。使用
next()
直接获取字符串,这样就没有长度限制。您可以使用
scan.nextbiginger()
获取更大的整数值。根据在线二进制到十进制计算器,20位的二进制数是1048575。据我所知,Long可以容纳比这大得多的数字。我相信OP希望自己转换数字。(或者不是!)