转换为二进制 - 获取 IndexOutOfBoundsException
Posted
技术标签:
【中文标题】转换为二进制 - 获取 IndexOutOfBoundsException【英文标题】:Converting to binary - getting IndexOutOfBoundsException 【发布时间】:2016-05-24 05:27:42 【问题描述】:下面是我正在编写的一些代码,我想我应该让自己成为一个二进制计算器,让我的生活更轻松一些。但是,当我运行它时,我收到一条错误消息,告诉我有一个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;
【问题讨论】:
您需要执行基本调试:阅读异常的堆栈跟踪,因为它准确地告诉您是哪一行导致了问题。然后,在该行之前添加一些System.out.println
语句,这样您就可以看到您的字符串和您尝试访问的索引。
我在这里有点困惑。有人说我应该增加我的数组,也有人说我应该减少我的数组。我该做什么?
完全摆脱数组。
并调试您自己的代码,这应该是您来这里之前应该做的第一件事
我已经尝试调试我的代码,但我遇到了完全不同的问题。如果数组的所有八个整数都被填充,我的数组会打印出“49”八次。我假设将打印数组,而不是其他东西。但现在有道理了,我会尝试自己做。感谢大家的帮助!
【参考方案1】:
根据您输入的数字,二进制字符串的长度会有所不同。如果输入 0 或 1,您将得到“0”或“1”。但是您的代码假定您的号码有 8 位。这意味着它只有在设置了第八位时才会起作用。
您似乎正在尝试打印由空格分隔的位,然后是新行。最好使用更直接的方法:
String b = Integer.toString(x, 2);
for (int idx = 0; idx < b.length(); ++idx)
System.out.print(b.charAt(idx));
System.out.print(' ');
System.out.println();
【讨论】:
【参考方案2】:好的,所以你有一个大小为 7 的数组,它只给你 0-6,但是你调用了 array[7],所以你的数组大小增加了一个
【讨论】:
我认为数组从元素“0”开始? 您对数组大小是正确的(应该是数组[8])。然而,这不是他得到 IndexOutOfBoundsException 的地方——它在代码行:myArrays[3] = bon.charAt(3);【参考方案3】:myArrays 是一个 7 元素的 len 数组,如果您执行从 0 到 7 的操作,您将超出限制..
尝试从 0 到 6!
【讨论】:
【参考方案4】:您的数组大小需要更大...
int myArrays [ ] = new int [ 8 ];
【讨论】:
【参考方案5】:您的代码中有两点需要注意:
1.
int myArrays [] = new int [7];
应改为:
int myArrays [] = new int [8];
2.
您调用bon.charAt()
而不检查您的变量bon
是否有足够的字符。
【讨论】:
【参考方案6】:Java.lang.StringIndexOutofBoundsException 几乎表明字符串的长度小于索引。你应该考虑长度。还有其他人提到的数组中的其他超出范围。
【讨论】:
【参考方案7】:试试这个:
替换这两行:
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 + ")");
【讨论】:
以上是关于转换为二进制 - 获取 IndexOutOfBoundsException的主要内容,如果未能解决你的问题,请参考以下文章
转换为二进制 - 获取 IndexOutOfBoundsException