我正在尝试将用户输入的单词转换为二进制。程序运行正常,但在用户输入他/她的单词后出现错误:
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:26 在home.main(home.java:84)
这是我的代码:
nodejs
我正在使用Eclipse Mars.1来运行该程序。任何帮助表示赞赏。
答案 0 :(得分:3)
您的问题在此代码中:
for(int b = 0; b < 27; b++)
{
if(word.charAt(a) == alphabet[b])
{
wordBin.addElement(Binary[b]);
}
}
alphabet
只有26个元素,这意味着您可以访问的最高索引是25。
b < 27
允许它最多索引26。
要解决此问题,只需将b < 27
更改为b < alphabet.length
即可。这将确保它不会超过最大索引,即使您要添加/删除元素。
使用ASCII允许其他人解码您的消息
我建议使用更通用的绘图系统。您目前要映射:
a = 0001 = 1
b = 0010 = 2
...
这些不是标准。对于不确切知道哪个字母代表哪个位组的人,您的结果将无用。虽然他们可以假设,但最好使用标准。
相反,您可以使用ASCII table查看哪个字母映射到哪个号码。从那里,您可以将数字转换为二进制。这将使其他人更容易将其转换回原始形式。
String word = "hey";
StringBuilder result = new StringBuilder();
int byteLength = 8;
for(char letter : word.toCharArray()) {
String bits = Integer.toBinaryString((int) letter);
if(bits.length() < byteLength) {
StringBuilder extendedBits = new StringBuilder();
for(int i = bits.length(); i < byteLength; i++) {
extendedBits.append("0");
}
result.append(extendedBits);
}
result.append(bits);
}
System.out.println(result);
其他人可以使用binary to text converter将其转换回字母,因为它符合标准。
这是因为(int) letter
返回该字母的ASCII映射。如果我们做了
int number = (int) 'h';
它会返回97
。从那里,我们通过Integer.toBinaryString(int)
将该数字转换为二进制数。
由于toBinaryString
给出一个修剪值(10而不是00000010),我们必须用0填充剩余的空格,直到有足够的位来表示单个字节。
答案 1 :(得分:1)
您的if语句使用==
。您应该使用if(word.equals("quit"))
。 Java中的==
运算符测试对象是否相同,而不仅仅是等效的。
您还会看到一个异常,告诉您已超出数组的边界。