Java 在没有math.pow()的情况下将二进制文件转换为10进制?

Java 在没有math.pow()的情况下将二进制文件转换为10进制?,java,math,base-conversion,Java,Math,Base Conversion,我希望创建一个简单的程序,将二进制数转换为十进制数,而不使用math.pow()。以下是我到目前为止所做的,最后使用Math.pow: import java.util.Scanner; public class Question1 { public static void main(String[] args) { System.out.println("Enter a binary number"); Scanner inputKeyboard = new Scanne

我希望创建一个简单的程序,将二进制数转换为十进制数,而不使用
math.pow()
。以下是我到目前为止所做的,最后使用
Math.pow

import java.util.Scanner;
public class  Question1 {
  public static void main(String[] args) {
    System.out.println("Enter a binary number");
    Scanner inputKeyboard = new Scanner(System.in);
    String binaryNumber = inputKeyboard.nextLine();
    while (!checkIfBinary(binaryNumber)) {
      System.out.println("That is not a binary number.  Enter a binary number");
      binaryNumber = inputKeyboard.nextLine();
    }
    int decimalNumber = binaryToNumber(binaryNumber);
    System.out.println("Your number in base 10 is " + decimalNumber + ".");
  }

  public static boolean checkIfBinary(String input) {
    for (int i = 0; i < input.length(); i++) {
      if(input.charAt(i) != '0' && input.charAt(i) != '1') {
        return false;
      }
    }
    return true;
  }

  public static int binaryToNumber(String numberInput) {
    int total = 0;
    for (int i = 0; i < numberInput.length(); i++) {
      if (numberInput.charAt(i) == '1')  {
        total += (int) Math.pow(2, numberInput.length() - 1 - i);
      }
    }
    return total;
  }
}
import java.util.Scanner;
公开课问题1{
公共静态void main(字符串[]args){
System.out.println(“输入二进制数”);
扫描仪输入键盘=新扫描仪(System.in);
String binaryNumber=inputKeyboard.nextLine();
而(!checkIfBinary(binaryNumber)){
System.out.println(“这不是一个二进制数,请输入一个二进制数”);
binaryNumber=inputKeyboard.nextLine();
}
整数小数=二进制数(二进制数);
System.out.println(“以10为基数的数字是“+小数+”);
}
公共静态布尔checkIfBinary(字符串输入){
对于(int i=0;i

我在没有
math.pow
的情况下进行幂运算时遇到了一个问题。我知道我需要使用一个循环,这个循环应该将2乘以自身
numberInput.length()-1-I
倍。但是我很难实现这一点。

Integer
允许您通过指定输入数字的
基数来实现这一点:

Integer.parseInt("101101101010111", 2); 
这不使用
Math.pow
:)


这可能不是您想要的,但无论如何可能对任何人都有帮助。

将您的
字符串
解析为整数,并为其提供基本
2

int decimalValue = Integer.parseInt(yourStringOfBinary, 2);
但请记住,整数的最大值为
2^31-1
,二进制形式为:

1111111111111111111111111111111
因此,如果您输入的二进制值大于上述值,您将得到
java.lang.NumberFormatException
错误,要解决此问题,请使用
BigInteger

int decimalValue = new BigInteger(yourBinaryString, 2).intValue()

我会从字符串的末尾向后计算,然后递增地计算每个字符的幂:

public static int binaryToNumber (String numberInput) {
    int currentPower = 1;
    int total = 0;

    for (int i = numberInput.length() - 1; i >= 0; i--) {
        if (numberInput.charAt(i) == '1')  {
            total += currentPower;
        }
        currentPower *= 2;
    }

    return total;
}

您可以使用Integer.parseInt

这里也回答了类似的问题:

唯一的区别是,在上面提到的答案中,他们将字符串(“01101”)转换为十进制整数


还可以参考Javadoc。

提示:您可以将总数乘以2,然后根据下一个数字加上或不加1,这将在多个二进制数字后给出新的总数。呃,您没有将二进制转换为“十进制”。您正在将二进制转换为Java内部数字形式--
int
,而这恰好是二进制。这行不是错了吗,它不应该是“| |”而不是&&&,如果(input.charAt(i)!='0'&&input.charAt(i)!='1')您不需要用幂运算将二进制数转换为十进制数。我认为像
Integer.parseInt(你的二进制数,2)
这样的东西正是你所需要的。@jdhw,请阅读我更新的答案。