当前位置: 首页 > 知识库问答 >
问题:

莫尔斯电码给英文翻译器提供ArrayIndexoutofBounds

孙嘉悦
2023-03-14

我必须创建莫尔斯到英语,反之亦然的翻译。英语到morse部分工作,但每当我试图用morse输入一些东西时,它会给我一个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]);
                }}}}

共有1个答案

谭绍晖
2023-03-14

这是工作代码。需要进行3项更改,首先,必须更改上的拆分,以更正regex“\\”''上的拆分。split()将正则表达式作为参数,而''是regex中的一个特殊字符,因此您需要使用regexe的\转义它,但是,当将regex转换为java字符串时,您需要再次转义它。结果是\\
第二,当字符串匹配时,
循环的内部可以停止,因此添加了break。
第三,内部循环增量的变量i更改为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;
                }
            }
            
        }
    }

以下是一些测试输入/输出:输入1表示英语到莫尔斯码。输入2为Morse到英语:2

Please input sentence into the translator:
.--.|.|-|
pet

 类似资料:
  • 我正在为我的编程介绍课编写一个简单的莫尔斯电码翻译器。这是一个非常简单的设计基础上的技术,我已经教。 这个程序工作于单个字符转换,但不能做单词或句子。我认为问题与末尾的语句有关,但我不知道如何打印整个翻译文本。

  • 到目前为止,这是我的代码(是的,它是法语的,因为我在一个讲法语的省份和学校,所以如果你需要澄清我的代码,请告诉我): 所以是啊,对不起我的英语如果它不是那么好

  • 及其对应的莫尔斯电码 作为测试用语。当我用这个短语把英语翻译成莫尔斯电码时,我得到了

  • 这是一个在线翻译的c++库,在Linux系统上实现的. 支持百度和谷歌在线翻译 可中英或中日互译。 emacs插件支持

  • 英文中形容词有原级、比较级、最高级之分。翻译最高级的常见做法就是在之前加上“最”:best就是“最好”,worst就是“最糟”,highest就是“最高”,lowest就是“最低”……总之离不开“最”字。 这种现象正常吗?著名翻译家思果先生曾提出,最高级不一定都要翻译成“最xx”,因为中文里“最”往往是唯一,而英文的最高级则可以加one of…之类的限定,“最xx之一”的说法,多少有点名不正、言不

  • 本文向大家介绍java实现英文翻译程序,包括了java实现英文翻译程序的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现英文翻译程序的具体代码,供大家参考,具体内容如下 1.功能简介 将文本文件中的英文转换为对应的中文 词库如下: 源文件: 翻译后的文件: 输入源文件路径,将翻译后的内容输出到result.txt文件中。 2.重要技术 (1)如何载入词库文件    因为词库