Java 二进制到十进制转换函数给出了错误的解决方案
正如标题所说,我制作了一个小函数,从用户字符串1和0中提取,输出应该是它的十进制数,但由于某些原因,我得到了错误的答案,希望您能帮助我找到问题Java 二进制到十进制转换函数给出了错误的解决方案,java,binary,Java,Binary,正如标题所说,我制作了一个小函数,从用户字符串1和0中提取,输出应该是它的十进制数,但由于某些原因,我得到了错误的答案,希望您能帮助我找到问题 public class ToDecimal{ public static void main(String[] args){ String string = args[0]; int length = string.length(); int power = length - 1; int decimal = 0;
public class ToDecimal{
public static void main(String[] args){
String string = args[0];
int length = string.length();
int power = length - 1;
int decimal = 0;
while(length > 0){
if (string.charAt(length - 1) == '1'){
decimal = decimal + (int)(Math.pow(2, length - 1));
} else if (string.charAt(length - 1) == '0'){
} else {
System.out.println("Wrong string spelling...");
}
length--;
}
System.out.println(decimal);
}
}您正在按向后顺序应用指数。也就是说,在第一个循环中,您查看最后一个字符,但应用最大的指数,
length-1
,第一个字符获得指数0
使用power
作为指数,而不是length-1
,并在循环结束时增加power
decimal = decimal + (int)(Math.pow(2, power));
及
你是按倒序应用指数的。也就是说,在第一个循环中,您查看最后一个字符,但应用最大的指数,length-1
,第一个字符获得指数0
使用power
作为指数,而不是length-1
,并在循环结束时增加power
decimal = decimal + (int)(Math.pow(2, power));
及
只是在开始时反转了字符串,并添加了条件以减小功率
public static void main(String[] args){
String string = new StringBuilder(args[0]).reverse().toString();
int length = string.length();
int power = length - 1;
int decimal = 0;
while(length > 0){
if (string.charAt(length - 1) == '1'){
decimal = decimal + (int)(Math.pow(2, length - 1));
} else if (string.charAt(length - 1) == '0'){
} else {
System.out.println("Wrong string spelling...");
}
power--;
length--;
}
System.out.println(decimal);
}
}
不带反转
String string = args[0];
int length = string.length();
int power = length - 1;
int decimal = 0;
int i=0;
while(i<length){
if (string.charAt(i) == '1'){
decimal = decimal + (int)(Math.pow(2, length - i-1));
}
i++;
}
System.out.println(decimal);
String字符串=args[0];
int length=string.length();
整数幂=长度-1;
整数小数=0;
int i=0;
而(i只是在开始时反转字符串并添加条件以减小功率
public static void main(String[] args){
String string = new StringBuilder(args[0]).reverse().toString();
int length = string.length();
int power = length - 1;
int decimal = 0;
while(length > 0){
if (string.charAt(length - 1) == '1'){
decimal = decimal + (int)(Math.pow(2, length - 1));
} else if (string.charAt(length - 1) == '0'){
} else {
System.out.println("Wrong string spelling...");
}
power--;
length--;
}
System.out.println(decimal);
}
}
不带反转
String string = args[0];
int length = string.length();
int power = length - 1;
int decimal = 0;
int i=0;
while(i<length){
if (string.charAt(i) == '1'){
decimal = decimal + (int)(Math.pow(2, length - i-1));
}
i++;
}
System.out.println(decimal);
String字符串=args[0];
int length=string.length();
整数幂=长度-1;
整数小数=0;
int i=0;
最简单的方法是decimal=Integer.parseInt(string,2);
。最简单的方法是decimal=Integer.parseInt(string,2);
。它不起作用,增加功率是错误的,因为我们正在从大功率变为最小功率,这对我来说是有效的。用你的代码,“1011”被解释为“1101”,并变为13
。使用我的修复程序,“1011”现在是正确的--11
。您希望循环中首先处理的最后一个字符具有较低的幂次0。但是,如果函数从左到右读取二进制代码,为什么每次循环都需要增加幂次变量?它不起作用,增加幂次是错误的,因为我们正在从大幂次变为最小幂次帽子是2^0它对我有效。使用您的代码,“1011”被解释为“1101”,并变成13
。使用我的修复程序,“1011”现在是正确的--11
。您希望循环中首先处理的最后一个字符具有较低的幂次0。但是,如果函数从左到右读取二进制代码,为什么每次循环都需要增加幂次变量?我正在尝试避免使用反向方法,没有它我如何修复代码?试着浏览下面的内容发生在这里。我试图避免反向方法,没有它我怎么能修复我的代码?试着浏览一下这里发生的事情。