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