二进制到十进制转换器功能给出了错误的解

时间:2015-11-03 21:25:51

标签: 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;

    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);

}

}

2 个答案:

答案 0 :(得分:6)

您正在以向后的顺序应用指数。也就是说,在第一个循环中,您查看最后一个字符,但应用最大的指数length - 1,第一个字符获得指数0

使用power作为指数而不是length - 1,并在power循环的末尾增加while

    decimal = decimal + (int)(Math.pow(2, power));

    length--;
    power++;
}

答案 1 :(得分:0)

刚刚在开头反转了字符串,并添加了减少功率的条件。

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);