根据用户输入/莫尔斯码生成器从 HashMap 获取值

Getting values from HashMap according to user input / morse code generator

我正在尝试创建一个 Java 程序,该程序接受用户输入的字符串并将其翻译成摩尔斯电码。我试图将字母表中的每个字母及其相应的莫尔斯代码存储在 hashMap 中,我的目标是在从输入中读取键(常规字母)时能够获取值(莫尔斯代码)。我尝试了下面的内容,但是当我测试它时它一直打印 null 。我是 java 的新手,似乎不知道该怎么做。

import java.util.HashMap;
import java.util.Scanner;

public class Alphabet{

public static void main(String args[]) {

    Scanner sc = new Scanner(System.in);

    HashMap morsecode = new HashMap();
    morsecode.put("a",",-");
    morsecode.put("b","-...");
    //will add other letters later

    System.out.println("please enter an english sentence:");
    String val = (String)morsecode.get(sc.nextLine());
    System.out.println(val);        


}
}

正如我在最初的评论中所说, 不要使用原始类型。这里你的 Map 应该是 Character, String 因为这就是为什么你目前不能将一行中的多个字符映射到 Map 中的单个字符。基本上,我会这样做

Scanner sc = new Scanner(System.in);

Map<Character, String> morsecode = new HashMap<>();
morsecode.put('a', ",-");
morsecode.put('b', "-...");
// will add other letters later

System.out.println("please enter an english sentence:");
String line = sc.nextLine();
for (char ch : line.toLowerCase().toCharArray()) {
    System.out.print(morsecode.get(ch) + " ");
}
System.out.println();

但是你可以也可以

Scanner sc = new Scanner(System.in);

Map<String, String> morsecode = new HashMap<>();
morsecode.put("a", ",-");
morsecode.put("b", "-...");
// will add other letters later

System.out.println("please enter an english sentence:");
String line = sc.nextLine();
for (char ch : line.toLowerCase().toCharArray()) {
    System.out.print(morsecode.get(Character.toString(ch)) + " ");
}
System.out.println();

或任何其他从用户输入中迭代单个字符的方法。

您的代码正在打印 null,因为根据您的评论,此行 String val = (String)morsecode.get(sc.nextline()); 正在检索字符串 "ab" 的字符串值。根据您向 HashMap 添加条目的方式,您不添加 "ab" 而是添加单独的字母 "a" 和 "b";你在向 HashMap 索要你从未给过它的东西。下面,我为我认为您正在尝试做的事情添加了一个翻译步骤。靠近末尾的小块将提取您提供给 HashMap 的每个翻译,并为您提供给程序的英文句子中的每个字母构建一个新字符串。

import java.util.HashMap;
import java.util.Scanner;

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

        HashMap<String, String> morsecode = new HashMap<>();
        morsecode.put("a",",-");
        morsecode.put("b","-...");
        //will add other letters later

        System.out.println("please enter an english sentence:");
        String input = sc.nextLine();

        // Translate each letter from English -> code
        final StringBuilder builder = new StringBuilder();
        for (final char letter : input.toCharArray()) {
            builder.append(morsecode.get(Character.toString(letter)));
        }

        System.out.println(builder.toString());
        sc.close();
    }
}