以下是我正在处理的一些代码,我想我自己就是一个二进制计算器,让我的生活稍微容易一点。但是,当我运行它时,我收到一个错误,告诉我有一个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;
}
}
}
答案 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 + ")");