Java 二进制到十进制转换函数给出了错误的解决方案

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;

正如标题所说,我制作了一个小函数,从用户字符串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;

    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。但是,如果函数从左到右读取二进制代码,为什么每次循环都需要增加幂次变量?我正在尝试避免使用反向方法,没有它我如何修复代码?试着浏览下面的内容发生在这里。我试图避免反向方法,没有它我怎么能修复我的代码?试着浏览一下这里发生的事情。