【问题标题】:Incorrect return on binary to dec converter二进制到十进制转换器的错误返回
【发布时间】:2016-01-08 02:56:45
【问题描述】:

当我注意到转换器以某种方式给出了不正确的转换时,我正在修复和整理转换器。

例如,当使用BinaryNumber bn1 = new BinaryNumber("1011"); 创建一个要转换的新数字,然后用System.out.println(bn1.convertToDecimal()); 要求它给出结果时,它会打印出 3 而不是正确的结果 11。

我几乎可以肯定我的实际转换有误,但在我的脑海中思考它却找不到错误。

public class BinaryNumber {
    private String n;

    public BinaryNumber(String pn) {
        n = pn;
    }

    public String getN() {
        return n;
    }

    // Creating the .convertToDecimal()
    public int convertToDecimal() {
        int bitPosition = 0;
        int sum = 0;

        for (int i = n.length() - 1; i >= 0; i--) {
            sum = sum + (int) Math.pow(2, bitPosition) * (n.charAt(i) - 48);
        }
        return sum;
    }

    // Creating the .add to add the two different binary numbers after
    // converting
    public int add(BinaryNumber bn2) {
        return convertToDecimal() + bn2.convertToDecimal();
    }

    // Creating the .sub to subtract the two different binary numbers after
    // converting
    public int sub(BinaryNumber bn2) {
        return convertToDecimal() - bn2.convertToDecimal();
    }
}

【问题讨论】:

  • 你没有增加你的位位置
  • 为什么不使用Integer.toBinaryString(int)Integer.parseInt(int, 2)?你返回一个int
  • 为什么不使用1 << bitPosition(左移运算符)?

标签: java constructor binary decimal converter


【解决方案1】:

你只需要增加你的位位置变量。

int bitPosition = 0; int sum = 0;

  for (int i = n.length() - 1; i >= 0; i--) {

    sum = sum + (int) Math.pow(2, bitPosition++) * (n.charAt(i) - 48);

  }
  return sum;

【讨论】:

    【解决方案2】:

    首先,Java 有一个内置的二进制系统,使用原始的int 类型。您可以通过将0b 放在二进制形式的数字之前来使用它。

    如果您这样做是出于学习目的,那么会发生以下情况: 在每次迭代中,bitPosition 的值始终为0,因为您永远不会更新它。当然,您希望每次迭代都增加它。这可以简单地通过改变来完成

    Math.pow(2, bitPosition)

    Math.pow(2, bitPosition++)

    在变量后面加上++,在被引用后改变它。

    【讨论】:

      猜你喜欢
      • 2015-07-19
      • 2020-05-15
      • 2016-08-26
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 2020-06-27
      • 2020-06-25
      相关资源
      最近更新 更多