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,等等。。好的,是的,很好;