Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字母转换为摩尔斯电码每次只对一个字母有效_Java_Morse Code - Fatal编程技术网

Java 将字母转换为摩尔斯电码每次只对一个字母有效

Java 将字母转换为摩尔斯电码每次只对一个字母有效,java,morse-code,Java,Morse Code,我正在尝试输出莫尔斯电码字母表。目前,我将输入的字母映射到对应的摩尔斯电码字母。我遇到的问题是,在我输入一个字母后,后面的字母将不会输出 我的代码如下: public class Example { public static void main(String[] args) { Map<String, String> map = createAlphabet(); Scanner in = new Scanner(System.in);

我正在尝试输出莫尔斯电码字母表。目前,我将输入的字母映射到对应的摩尔斯电码字母。我遇到的问题是,在我输入一个字母后,后面的字母将不会输出

我的代码如下:

public class Example {

    public static void main(String[] args) {
        Map<String, String> map = createAlphabet();
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();

        for (Map.Entry<String , String> entry : map.entrySet()){
            if (entry.getKey().equalsIgnoreCase(s)){
                System.out.println(entry.getValue());
            }
        }

    }

    public static Map<String , String> createAlphabet() {
        Map<String , String> alphabet = new HashMap<>();

        alphabet.put("A" , ".-");
        alphabet.put("B" , "-...");
        alphabet.put("C" , "-.-");
        alphabet.put("D" , "-..");
        alphabet.put("E" , ".");
        alphabet.put("F" , "..-.");
        alphabet.put("G" , "--.");
        alphabet.put("H" , "....");
        alphabet.put("I" , "..");
        alphabet.put("J" , ".---");
        alphabet.put("K" , "-.-");
        alphabet.put("L" , ".-..");
        alphabet.put("M" , "--");
        alphabet.put("N" , "-.");
        alphabet.put("O" , "---");
        alphabet.put("P" , ".--");
        alphabet.put("Q" , "--.-");
        alphabet.put("R" , ".-.");
        alphabet.put("S" , "...");
        alphabet.put("T" , "-");
        alphabet.put("U" , "..-");
        alphabet.put("V" , "...-");
        alphabet.put("W" , ".--");
        alphabet.put("X" , "-..-");
        alphabet.put("Y" , "-.--");
        alphabet.put("Z" , "--..");


        return alphabet;
    }
}

任何帮助都将不胜感激

它将只读取一个值,因为此代码执行一次,例如,如果您传递一个单词,则无法获取字母

您键入“D”,它将打印-…,因为它是一个字符,但如果键入“HELLO”,它将不会打印整个单词,因为您需要按字符分隔并逐个打印

如果将循环更改为此,它将执行您想要的操作:

for (Map.Entry<String , String> entry : map.entrySet()){
        for(int i = 0; i<s.length(); i++){
            if (entry.getKey().equalsIgnoreCase(String.valueOf(s.charAt(i)))){
                System.out.print(entry.getValue() + " ");
            }
        }
    }
顺便说一句,如果你想避免每次都运行应用程序,你可以创建一个标志来保持键入和转换,直到你想要这样的东西:

public static void main(String[] args) {
    Map<String, String> map = createAlphabet();
    Scanner in = new Scanner(System.in);
    String s = in.nextLine();
    while(!s.equals(".")){
        for (Map.Entry<String , String> entry : map.entrySet()){
            for(int i = 0; i<s.length(); i++){
                if (entry.getKey().equalsIgnoreCase(String.valueOf(s.charAt(i)))){
                    System.out.print(entry.getValue() + " ");
                }
            }

        }
        System.out.println();
        s = in.nextLine();
        System.out.println();
    }

}
编辑 根据@Stephen C的建议,我将代码更改为

public static void main(String[] args) {
        Map<String, String> map = createAlphabet();
        Scanner in = new Scanner(System.in);
        String s = in.nextLine().toUpperCase();
        while (!s.equals(".")) {
            for (int i = 0; i < s.length(); i++) {
                System.out.print(map.get((String.valueOf(s.charAt(i))))+ " ");
            }
            System.out.println();
            s = in.nextLine().toUpperCase();
            System.out.println();
        }

    }

当您的程序有编译错误时,使用for方法是没有意义的。如果你不能编译它,它就不会工作。2地图的要点是,你可以使用get。。。方法3字符串BD不是表的键。这些键都是一个字符串。因此,您需要查找一个字符串。现在我们可以为您修复代码,但这与您的家庭作业/练习的目的背道而驰。因此,我建议您接受这些提示,并找出如何自己修复程序。@StephenC公平地说,在So上,为了简洁起见,在显示代码时省略导入语句是很常见的。如果OP发布了他/她需要调试帮助的代码,而代码没有编译,那么它就不是MCVE,这个问题就离题了。公平地说。。。实际上,我已经为OP提供了大量的帮助!用地图代替地图可能更好。@JeRiF你检查过我的答案了吗?除了。。。。为什么要迭代映射的条目?使用get。我不认为这个代码做了OP真正想做的事情:将单词转换成莫尔斯电码。更新了答案@StephenC,我只是按照他的代码,你是对的,这更好。我不认为这个代码做OP真正想做的事:将单词转换成莫尔斯电码>这个电码如果你输入Hello,它会在莫尔斯电码中打印Hello,你试过了吗?我对你最初重写的循环发表了评论。。。如果我读对了,在翻译的时候,它会把单词中的字母随机化。这就是OP的代码在查找单个字符串时所做的,但这是不正确的。你以后的编辑没有这个问题。哦,我现在明白了,是的,它会先打印E,然后打印H,等等。。好的,是的,很好;