转换为二进制 - 获取IndexOutOfBoundsException

时间:2016-02-12 22:20:28

标签: java indexoutofboundsexception bluej

以下是我正在处理的一些代码,我想我自己就是一个二进制计算器,让我的生活稍微容易一点。但是,当我运行它时,我收到一个错误,告诉我有一个Java.lang.StringIndexOutofBoundsException。我真的不知道如何修复它,因为据我所知,我已经完成了所有事情:

private static void ten()
{
    Scanner scan = new Scanner(System.in);

    System.out.println("What number would you like to convert to binary?");
    System.out.print("Enter the integer here:  ");
    int x = scan.nextInt();

    String bon = Integer.toString(x , 2);

    int myArrays [ ] = new int [ 7 ];

    myArrays[0] = bon.charAt(0); 
    myArrays[1] = bon.charAt(1); 
    myArrays[2] = bon.charAt(2); 
    myArrays[3] = bon.charAt(3); 
    myArrays[4] = bon.charAt(4); 
    myArrays[5] = bon.charAt(5); 
    myArrays[6] = bon.charAt(6); 
    myArrays[7] = bon.charAt(7); 

    for (int i = 0; i < myArrays.length; i++)
    {
        System.out.print(myArrays [ i ] + " ");
        int count = 0;
        count++;
        if (count == 10) {
            System.out.println();
            count = 0;
        }
    }

}

7 个答案:

答案 0 :(得分:1)

根据您输入的数字,二进制字符串的长度会有所不同。如果输入0或1,则会得到“0”或“1”。但是你的代码假设你的数字有8位。这意味着只有在设置了第8位时它才会起作用。

看起来您正在尝试打印由空格分隔的位,然后是新行。最好采用更直接的方法:

bon

答案 1 :(得分:0)

好的,所以你有一个大小为7的数组,它只给你0-6但是你调用了数组[7]所以你的数组大小增加了一个

答案 2 :(得分:0)

myArrays是一个7元素len数组,如果你从0到7进行操作,你就超出了限制..

尝试从0到6!

答案 3 :(得分:0)

您的阵列大小需要更大...... int myArrays [ ] = new int [ 8 ];

答案 4 :(得分:0)

您的代码中有两点需要注意:

<强> 1

function DecorateClass<T>(instantiate: (json:any) => T){
    return (classTarget:typeof T) => { /*...*/  } // Cannot resolve symbol T
}

应改为:

int myArrays [] = new int [7];

<强> 2

如果您没有检查变量int myArrays [] = new int [8]; 是否有足够的字符,请致电bon.charAt()

答案 5 :(得分:0)

Java.lang.StringIndexOutofBoundsException几乎表示字符串的长度小于索引。你应该考虑长度。另外还有其他人提到的数组中的其他Out of bounds。

答案 6 :(得分:0)

试试这个:

替换这两行:

String bon = Integer.toString(x , 2);
int myArrays [ ] = new int [ 7 ];

使用这些行(1只是为了显示初始值):

String byteString = Integer.toBinaryString(x & 0xFF);
byteString = String.format("%8s", byteString).replace(' ', '0');
int[] myArrays = new int[8];
System.out.println("(" + byteString  + ")");