我正在尝试创建一个Java程序,该程序将用户字符串输入并将其转换为Morse代码。我试图将字母的每个字母存储在哈希图中,并使用其相应的Morse Code&我的目标是在从输入中读取密钥(常规字母(时能够获得值(Morse代码(。我尝试了下面的一些东西,但在我测试时它会不断打印空。我是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"one_answers" b";您正在向哈希图询问您从未给过的东西。下面,我为您认为您想做的事情添加了翻译步骤。末端附近的小块将拉动您给出的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();
}
}