gpt4 book ai didi

Java二进制转换器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:44 25 4
gpt4 key购买 nike

我正在尝试将用户输入的单词转换为二进制。程序运行正常,但在用户输入他/她的单词后出现错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 26 at home.main(home.java:84)

这是我的代码:

 import java.util.Scanner;
import java.util.Vector;

public class home
{
public static void main(String[] args)
{
Scanner getWord = new Scanner(System.in);

char[] alphabet = new char[]
{
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z',
};
String[] Binary = new String[]
{
"00001 ",
"00010 ",
"00011 ",
"00100 ",
"00101 ",
"00110 ",
"00111 ",
"01000 ",
"01001 ",
"01010 ",
"01011 ",
"01100 ",
"01101 ",
"01110 ",
"01111 ",
"10000 ",
"10001 ",
"10010 ",
"10011 ",
"10100 ",
"10101 ",
"10110 ",
"10111 ",
"11000 ",
"11001 ",
"11010 ",
};

String word;
System.out.println("Type in what you want to convert into binary: (to exit type in 'quit')");
while(true)
{
Vector<String> wordBin = new Vector<String>();
word = getWord.next();

if(word == "quit")
{
break;
}
for(int a = 0; a < word.length(); a++)
{
for(int b = 0; b < 27; b++)
{
if(word.charAt(a) == alphabet[b])
{
wordBin.addElement(Binary[b]);
}
}
}

System.out.println();
System.out.println("That in binary is: ");
System.out.println();

for(int c = 0; c < wordBin.size(); c++)
{
System.out.println(wordBin.get(c));
}

System.out.println();
System.out.println("What is the next word that you would like to type in: ");

}

System.out.println();
System.out.println("Hava a nice day");
}
}

我正在使用 Eclipse Mars.1 来运行该程序。感谢您的帮助。

最佳答案

您的问题出在这段代码中:

for(int b = 0; b < 27; b++)
{
if(word.charAt(a) == alphabet[b])
{
wordBin.addElement(Binary[b]);
}
}

alphabet只有 26 个元素,这意味着您允许访问的最高索引是 25。 b < 27允许它最多索引 26 个。

要修复它,只需更改 b < 27b < alphabet.length .这将确保它不会超过最大索引,即使您要添加/删除元素也是如此。


使用 ASCII 允许其他人解码您的消息

我建议使用更通用的 map 系统。您当前映射:

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 填充剩余的空间,直到有足够的位来表示一个字节。

关于Java二进制转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33588890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com