Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        5年前关闭。
                                                                                            
                
        
我已经在此发布了一个主题,但是已经做了相当大的修改(该主题被搁置了。所以我无法编辑)更改了我的代码(我尝试了其中一个用户所说的不同变体,但没有bean)。我试过只运行toMorse,但是尽管它可以编译,但没有输出,并且显示错误消息'java.lang.ArrayIndexOutOfBoundsException(at projmorsejava:22 and 46)',我不确定如何配置toEnglish,这时我已经尝试使用replaceAll,indexOf和valueOf方法。我也尝试过使用plaintextString,但是也没有解决(我可能实现不正确)。
这是我的修改代码:

import java.util.Scanner;

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

        String[] alpha = { "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[] dottie = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
                "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.",
                "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
                "-.--", "--..", ".----", "..---", "...--", "....-", ".....",
                "-....", "--...", "---..", "----.", "-----", "|" };

        System.out
                .println("Enter English to convert from English or Morse to convert from Morse:");

        String ans = input.nextLine();

        if (ans.equals("English")) {
            System.out.println("Please enter the text you would like   to convert to Morse Code: ");
            String english = input.nextLine();

            char[] translates = (english.toLowerCase()).toCharArray();
            System.out.println(toMorse(translates, dottie)); //calls on method toMorse

                }
                        else if (ans.equals("Morse")) {
            System.out
                    .println("Please enter the text you would like to convert to English (separate words with '|'):");
            String code = input.nextLine();

             String[] translates = (code.split("[|]", 0));
                     System.out.println(toEnglish(translates, alpha));//calls on method toEnglish

        }
    else
    System.out.println("Invalid input, please try again.");
     }

       public static String toMorse(char [] translates, String [] dottie)
       {
      String morse = "";
      for (int j = 0; j < translates.length; j++)
      {
        char a = translates[j];
        if(Character.isLetter(a))
        {
           morse = dottie[a + 'a'];
        }
      }
      return morse;/*so I tried running only this(commented other stuff out) and it compiled but although it ran it didnt translate */
    }

    public static String toEnglish(String [] translates, String  [] alpha)
    {
      String s;
      for (int n = 0; n < translates.length; n++)
      {
        String a = translates[n];
                s = java.util.Arrays.asList(alpha).(Character.toChars(a + 'a')[0]);//I'm not sure what to do here..
      }
      return s;
    }
}

最佳答案

有些事情不起作用:


缺少初始public class ...(我怀疑有复制粘贴错误)
由于您使用扫描仪,缺少import java.util.Scanner;
toMorse的错误调用:首先,需要两个参数(检查方法签名);然后,第一个参数的名称不是morse(未知符号),必须是您刚刚“创建”的translates!关于第二个:您需要用字符串数组代替例如莫尔斯电码为“ e”,因此第二个参数必须为... dottie
toEnglish的错误调用:需要两个参数(如前所述检查方法签名!);第一个必须再次为translates(未知的s,之前为morse)!关于第二个参数:参见上文,但是当然由于输入中有莫尔斯,因此需要另一个数组。
toMorse中,您使用translates[j]而不是valueOf选择每个字符。
同样,在toEnglish中,您可以使用translates[n]获得字符串
toEnglishtoMorse中,您必须将转换后的字符串“累加”为字符串,并在末尾(即循环外)返回它!
拥有一个字符串,您可以使用.charAt(0)在pos 0处选择一个字符:执行x - 'a'之类的操作x不能为字符串,因此,由于您有一个字符串,因此必须获取其第一个字符。
注意:关于morses的使用:方法中的变量名与调用方中的变量名无关!


toMorse的示例:

    String morse = "";
    for (int j = 0; j < translates.length; j++)
    {
        char a = translates[j];
        if(Character.isLetter(a))
        {
            morse += dottie[a - 'a'];
        }
    }
    return morse;  // this symbol is unknown to the caller


您将使用简单的名称来调用它

              System.out.println(toMorse(translates, dottie));


toEnglish的修复非常相似(尽管原始代码无法正常工作),我希望您可以自己完成。

我认为或多或少都是。

修复英文的建议:

对于translates数组中的每个字符串,必须搜索dottie字符串数组才能搜索点和线的特定序列。

如果找到它,则找到它的位置(索引),它也是您在alpha数组中保留的正确字母的索引。因此,您可能需要将该数组添加为参数,并使用索引来选择字母。

或者,更确切地说,您可以使用与toMorse相同的“技巧”,并保持toEnglish方法签名不变:一旦有了索引(因为找到了索引),就可以“反转”编码算法,因此您必须在该索引(整数)上添加'a'以获得字母的代码。

您可以使用类似Character.toChars(k + 'a')[0]的方式将要添加的字符作为“ k”作为“累加字符串”。

麻烦的符号Character.toChars(k + 'a')[0]因为确实Character.toChars返回一个数组,所以我们选择该数组的第一个元素,即我们需要的char。

10-06 10:19