摩尔斯电码到英文翻译器给出 ArrayIndexoutofBounds
Morse Code to English Translator gives ArrayIndexoutofBounds
我必须创建莫尔斯到英语的翻译器,反之亦然。英语到莫尔斯的部分有效,但每当我尝试输入莫尔斯的内容时,它都会给我一个 ArrayIndexOutofBounds 异常,我不知道如何修复它。我已经放入了一个拆分函数,但我不确定为什么会出现异常。
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] english = { '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', '1', '2', '3', '4',
'5', '6', '7', '8', '9', '0'};
String[] morse = { ".-", "-...", "-.-.", "-..", ".",
"..-.", "--.", "....", "..", ".---",
"-.-", ".-..", "--", "-.", "---",
".--.", "--.-", ".-.", "...", "-",
"..-", "...-", ".--", "-..-", "-.--",
"--..", "|" }
String userInput;
int translatorChoice;
String result;
System.out.println("Enter 1 for English to Morse code. Enter 2 for Morse to English:");
translatorChoice = input.nextInt();
if (translatorChoice != 1 && translatorChoice !=2 ){
throw new ArithmeticException("Please enter a valid number");
}
System.out.println();
System.out.println("Please input sentence into the translator:");
userInput = br.readLine();
if (translatorChoice == 1){
userInput = userInput.toLowerCase();
englishtoMorse(morse,userInput,english);}
else if(translatorChoice == 2) {
morsetoEnglish(english, userInput, morse);}
public static void morsetoEnglish (char[] english, String userInput, String[] morse){
String[] input = userInput.split("|");
for (int i = 0; i < input.length; i++){
for (int j = 0; j < morse.length; i++){
if (morse[j].equals(input[i])) {
System.out.print(english[j]);
}}}}
所以,我认为这可以通过一些逻辑重新工作来完成
public static void englishToMorse(char[] english, String userInput, String[] morse){
char[] chars = userInput.toCharArray();
String englishCharsAsString = new String(english);
for (char character: chars) {
if (character == ' ') {
System.out.println(" ");
continue;
}
int index = englishCharsAsString.indexOf(character);
System.out.println(morse[index]);
}
}
让我解释一下这里发生了什么,我们也应该能够对其进行逆向工程以制作 morseToEnglish
方法。
- 所以我们首先获取用户输入并将其转换为字符数组,这样我们就知道用户的各个字符是什么。
- 接下来我们将英文字符数组转换为一个字符串,这样我们就可以在该字符串中找到一个字母的索引,并将其映射到莫尔斯电码数组
- 现在我们遍历用户输入的所有字符,找到该字符在英文字符串中的索引,然后使用该索引获取莫尔斯电码表示形式。
这是工作代码。将进行 3 处更改,首先,必须更改 "|"
上的拆分,以将正则表达式 "\|"
正确地拆分为 '|'
。 split()
将正则表达式作为参数,而 '|'
是正则表达式中的特殊字符,因此您需要使用正则表达式的 \
对其进行转义,但是,将正则表达式转换为 java 时string 你再次逃脱它。结果是 \|
其次,内部 for
循环可以在字符串匹配时停止,从而添加中断。
第三,变量 i
在内部 for
循环增量中更改为 j
。
public static void morsetoEnglish (char[] english, String userInput, String[] morse){
String[] input = userInput.split("\|");
for (int i = 0; i < input.length; i++){
for (int j = 0; j < morse.length; j++){
if (morse[j].equals(input[i])) {
System.out.print(english[j]);
break;
}
}
}
}
下面是一些测试 input/output:
Enter 1 for English to Morse code. Enter 2 for Morse to English:
2
Please input sentence into the translator:
.--.|.|-|
pet
我必须创建莫尔斯到英语的翻译器,反之亦然。英语到莫尔斯的部分有效,但每当我尝试输入莫尔斯的内容时,它都会给我一个 ArrayIndexOutofBounds 异常,我不知道如何修复它。我已经放入了一个拆分函数,但我不确定为什么会出现异常。
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] english = { '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', '1', '2', '3', '4',
'5', '6', '7', '8', '9', '0'};
String[] morse = { ".-", "-...", "-.-.", "-..", ".",
"..-.", "--.", "....", "..", ".---",
"-.-", ".-..", "--", "-.", "---",
".--.", "--.-", ".-.", "...", "-",
"..-", "...-", ".--", "-..-", "-.--",
"--..", "|" }
String userInput;
int translatorChoice;
String result;
System.out.println("Enter 1 for English to Morse code. Enter 2 for Morse to English:");
translatorChoice = input.nextInt();
if (translatorChoice != 1 && translatorChoice !=2 ){
throw new ArithmeticException("Please enter a valid number");
}
System.out.println();
System.out.println("Please input sentence into the translator:");
userInput = br.readLine();
if (translatorChoice == 1){
userInput = userInput.toLowerCase();
englishtoMorse(morse,userInput,english);}
else if(translatorChoice == 2) {
morsetoEnglish(english, userInput, morse);}
public static void morsetoEnglish (char[] english, String userInput, String[] morse){
String[] input = userInput.split("|");
for (int i = 0; i < input.length; i++){
for (int j = 0; j < morse.length; i++){
if (morse[j].equals(input[i])) {
System.out.print(english[j]);
}}}}
所以,我认为这可以通过一些逻辑重新工作来完成
public static void englishToMorse(char[] english, String userInput, String[] morse){
char[] chars = userInput.toCharArray();
String englishCharsAsString = new String(english);
for (char character: chars) {
if (character == ' ') {
System.out.println(" ");
continue;
}
int index = englishCharsAsString.indexOf(character);
System.out.println(morse[index]);
}
}
让我解释一下这里发生了什么,我们也应该能够对其进行逆向工程以制作 morseToEnglish
方法。
- 所以我们首先获取用户输入并将其转换为字符数组,这样我们就知道用户的各个字符是什么。
- 接下来我们将英文字符数组转换为一个字符串,这样我们就可以在该字符串中找到一个字母的索引,并将其映射到莫尔斯电码数组
- 现在我们遍历用户输入的所有字符,找到该字符在英文字符串中的索引,然后使用该索引获取莫尔斯电码表示形式。
这是工作代码。将进行 3 处更改,首先,必须更改 "|"
上的拆分,以将正则表达式 "\|"
正确地拆分为 '|'
。 split()
将正则表达式作为参数,而 '|'
是正则表达式中的特殊字符,因此您需要使用正则表达式的 \
对其进行转义,但是,将正则表达式转换为 java 时string 你再次逃脱它。结果是 \|
其次,内部 for
循环可以在字符串匹配时停止,从而添加中断。
第三,变量 i
在内部 for
循环增量中更改为 j
。
public static void morsetoEnglish (char[] english, String userInput, String[] morse){
String[] input = userInput.split("\|");
for (int i = 0; i < input.length; i++){
for (int j = 0; j < morse.length; j++){
if (morse[j].equals(input[i])) {
System.out.print(english[j]);
break;
}
}
}
}
下面是一些测试 input/output:
Enter 1 for English to Morse code. Enter 2 for Morse to English:
2
Please input sentence into the translator:
.--.|.|-|
pet