【问题标题】:Decimal to Binary Converter in JavaJava中的十进制到二进制转换器
【发布时间】:2012-11-08 00:29:37
【问题描述】:

我需要用 Java 做一个十进制到二进制的转换器。我不能使用 Integer.toBinaryString() 并且我看到的每个答案都使用它。我需要实际制作算法。我想将输入保留为 int,将输出保留为 String,因为如果我更改该程序的其余部分,这将变得一团糟。如果可以的话,保持它非常基本。这是我经过数小时的起草和报废后得到的结果,它有很多问题,比如它甚至没有组合一个二进制数。请帮忙,我很困惑,我的大脑是一团糟。

public static String decToBin(int dec)
  {
    String bin = "";
    int exp = 0;

    for(int expLevel = 0; Math.pow(2, expLevel) <= dec; expLevel++)
    {
      if(dec - Math.pow(2, expLevel) >= 0)
      {
        dec -= Math.pow(2, expLevel-1);
      }
    }
    return bin;
  }

【问题讨论】:

  • 这里没有小数点。输入已经是二进制的。

标签: java binary decimal converter


【解决方案1】:

看来您需要复习数学笔记。下面是基本算法的一个很好的解释:How to Convert from Decimal to Binary

如果你查看提供的链接,你会发现你只需要得到除以 2 的数字的余数。作为一个简单的算法:

int n <- user input (or other source)
String binaryForm <- empty string
while (n > 0) {
    int res <- n % 2;
    n <- n / 2;
    binaryForm <- res + binaryForm
}

【讨论】:

  • 我想太多了,我什至不能告诉你什么是二加二。谢谢,这清除了它。但是我不知道如何使用该反向功能。我检查了Java API,String类中没有reverse()函数,我在哪里可以找到它?
  • 这是一个伪代码告诉你反转一个字符串。顺便说一句,您可以使用StringBuilder#reverse() 反转String
  • 我用你所说的话重写了我所拥有的。不知何故,它神奇地完美地工作而无需扭转它。非常感谢。
【解决方案2】:

您可以将参数移动 1 位并将其添加到字符串中。最后,您可以将其反转,如下所示:

public class Main {
    public static void main(String[] args) throws Exception {
        System.out.println(decToBin(0));
        System.out.println(decToBin(1));
        System.out.println(decToBin(2));
        System.out.println(decToBin(127));
    }

    public static String decToBin(int dec) {
        if (dec == 0) {
            return "0"; // special case
        }

        final StringBuilder result = new StringBuilder();
        int current = dec;

        while (current != 0) {
            result.append(current & 0x1);
            current = current >> 1;
        }

        return result.reverse().toString();
    }
}

还有一个fiddle。 但它适用于正整数。

【讨论】:

  • 我们还太新,不知道 >> 或 StringBuilder 之类的东西是什么,所以即使我使用它,我的老师也会叫我不要使用 StackOverflow。
  • 我猜你可以用 String 连接替换 StringBuilder 并用除以 2 进行移位。
【解决方案3】:

两件相当明显的事情:

  • 在声明之后,您不会在任何地方更改 bin(并且也不会使用 exp)。
  • if(dec - Math.pow(2, expLevel) &gt;= 0) 中的条件等价于循环不变量,因此始终为真。

这种方法可以工作,但循环必须走另一条路,即从 2 的较高幂到较低的幂(这意味着您首先必须找到小于输入的 2 的最高幂,除非你对前导零很好)。此外,它可能有助于避免重新分配方法参数 (dec)。

【讨论】:

    【解决方案4】:
    import java.util.Scanner;
    
    public class DecimalToBinary {
    
    public String toBinary(int n) {
       if (n == 0) {
           return "0";
       }
       String binary = "";
       while (n > 0) {
           int rem = n % 2;
           binary = rem + binary;
           n = n / 2;
       }
       return binary;
    }
    
    public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       System.out.print("Enter a number: ");
       int decimal = scanner.nextInt();
       DecimalToBinary decimalToBinary = new DecimalToBinary();
       String binary = decimalToBinary.toBinary(decimal);
       System.out.println("The binary representation is " + binary);
    
    }
    }
    

    【讨论】:

    • 可以加一点文字。
    • Scanner.nextInt() 将十进制转换为二进制。剩下的部分做其他事情。
    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    猜你喜欢
    • 2020-06-25
    • 2014-02-20
    • 2018-02-06
    • 2016-08-26
    • 1970-01-01
    • 2020-06-27
    • 2012-05-28
    • 2013-05-14
    • 2012-11-08
    相关资源
    最近更新 更多