Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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_Converter - Fatal编程技术网

Java中的十进制到二进制转换器

Java中的十进制到二进制转换器,java,binary,decimal,converter,Java,Binary,Decimal,Converter,我需要用Java做一个十进制到二进制的转换器。我不能使用Integer.tobinarysting(),我看到的每个答案都使用它。我需要做一个算法。我想保持输入为int,输出为String,因为如果我改变了,程序的其余部分就会被搞乱。如果可以的话,保持它相当基本。这就是我经过数小时的起草和废弃后得到的结果,它有很多问题,比如它甚至连一个二进制数都没有放在一起。求求你,求求你帮帮我,我很困惑,我的大脑一团糟 public static String decToBin(int dec) {

我需要用Java做一个十进制到二进制的转换器。我不能使用Integer.tobinarysting(),我看到的每个答案都使用它。我需要做一个算法。我想保持输入为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;
  }
公共静态字符串decToBin(int-dec)
{
字符串bin=“”;
int exp=0;
for(int explavel=0;Math.pow(2,explavel)=0)
{
dec-=数学功率(2,解释层-1);
}
}
返回仓;
}

看起来你需要复习你的数学笔记。下面是对基本算法的一个很好的解释:

如果您检查提供的链接,您将看到只需要将数字的剩余部分除以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
}

int n两件非常明显的事情:

  • 声明后,您不会在任何地方更改
    bin
    (并且
    exp
    也不会被使用)
  • if(dec-Math.pow(2,explavel)>=0)
    中的条件等价于循环不变量,因此总是true

这种方法是可行的,但循环必须走另一条路,即从两个较高的幂到较低的幂(这意味着您首先必须找到两个小于输入的最大幂,除非您对前导零没有意见)。此外,它可能有助于避免重新指定方法参数(
dec
)。

您可以将参数移位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();
    }
}
这是一个好主意。
它适用于正整数。

我想得太多了,我甚至不能告诉你二加二是什么。谢谢,这就澄清了。然而,我不知道如何使用反向功能。我检查了Java API,发现String类中没有reverse()函数,我在哪里找到它?它是一个伪代码,告诉您反转字符串。顺便说一句,你可以用倒过来一个
字符串
。我把你说的话记在心里重写了。不知何故,它神奇地完美工作,而无需反转。非常感谢。我们还是太新了,不知道>>或StringBuilder之类的东西是什么,所以即使我用这个,我的老师也会叫我使用StackOverflow。我想你可以用
String
串接替换
StringBuilder
,并用2除法移位。也许可以添加一点文本。
Scanner.nextInt()
将十进制转换为二进制。这段代码的其余部分还有其他作用。虽然这段代码可以回答这个问题,但提供关于如何和/或为什么解决这个问题的附加上下文将提高答案的长期值。这里没有小数。输入已经是二进制的。
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);

}
}