二进制到十进制,错误消息

时间:2014-11-11 20:47:36

标签: java for-loop binary decimal

我编写了一个将二进制数转换为十进制数的程序 当我用一些二进制数运行程序时,程序给我十进制数,但有一个错误信息。

我的代码:

public class ohad {

    public static void main(String[] args) {

        String bin = "10011";
        int length = bin.length();
        int j = 0;
        int sum = 0;

        if (length != 0) {
                    for (int i=0; i < bin.length(); i++){
                        if (bin.charAt(i) == '0' || bin.charAt(i) == '1'){

                            for (int t = (length - 1); t >= 0; t--){
                                String s = bin.charAt(j) + "";
                                sum = (int)(sum + (Integer.valueOf(s)) * (Math.pow(2, t)));
                                j++;
                            }
                            System.out.println(sum);
                        }                           
                        else {
                            System.out.println("illegal input.");  
                        }

                    }
        } else {
            System.out.println("illegal input.");

        }   

    }

}

错误消息:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at java.lang.String.charAt(String.java:646)
at ohad.main(ohad.java:15)

我认为这是我的j索引。我该怎么办?

5 个答案:

答案 0 :(得分:2)

我该怎么办?

我会像Integer.parseInt(String,int)一样使用

String bin = "10011";
System.out.println(Integer.parseInt(bin, 2));

输出

    19

答案 1 :(得分:1)

你需要j索引吗?快速看一下,我认为你可以使用i index而不是j。

String s = bin.charAt(j) + "";
String s = bin.charAt(i) + "";

答案 2 :(得分:0)

您需要重置j变量。

在i for循环的第二次迭代中for (int i=0; i < bin.length(); i++){ j超出界限,因为它未设置为零再次尝试以下代码:

for (int i=0; i < bin.length(); i++){
    j=0; // add this 
    if (bin.charAt(i) == '0' || bin.charAt(i) == '1'){
        for (int t = (length - 1); t >= 0; t--){
             String s = bin.charAt(j) + "";
             sum = (int)(sum + (Integer.valueOf(s)) * (Math.pow(2, t)));
             j++;
        }
        System.out.println(sum);
    } else {
        System.out.println("illegal input.");
    }
}

答案 3 :(得分:0)

虽然Elliott的答案是绝对正确的,并且提供了一种更简单的方法来解决将二进制数转换为十进制数的问题,但它并没有告诉您导致错误的原因。

由于j变量引发异常是正确的,问题在于当内循环(带索引)时j变量永远不会被设置回0变量t)。我更改了您的代码以反映这一点: for (int t = (length - 1); t >= 0; t--){ String s = bin.charAt(j) + ""; sum = (int)(sum + (Integer.valueOf(s)) * (Math.pow(2, t))); j++; } j = 0; //this is the added code System.out.println(sum); 这可以防止抛出异常,但会导致再次调用循环的另一个问题,每次打印直到您点击95。我会让你解决这个问题。

答案 4 :(得分:0)

你有一个循环太多了。这就是为什么j不断增加导致错误信息的原因。 删除t循环:

public static void main(String[] args) {
    String bin = "10011";
    int length = bin.length();
    int j = 0;
    int sum = 0;

    if (length != 0) {
        for (int i = length - 1; i >= 0; i--) {
            if (bin.charAt(i) == '0' || bin.charAt(i) == '1') {
                String s = bin.charAt(j) + "";
                sum = (int) (sum + (Integer.valueOf(s)) * (Math.pow(2, i)));
                j++;
            } else {
                System.out.println("illegal input.");
            }
        }
        System.out.println(sum);
    } else {
        System.out.println("illegal input.");

    }
}