根据用户输入/莫尔斯码生成器从 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();
}
}
我正在尝试创建一个 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();
}
}