我在拔头发…是的,它到处都贴了,不,似乎不能掩盖我的错误。我明白我在努力处理字符和字符串的细微差别。但我的产出没有帮助,所以也许其他人可以?下面是我得到的输出和给我的代码。
输入:
…
无输出
这个输入
.-
输出
E
E
E
而这个输入
.-
输出
E
E
E
只有第一个莫尔斯“字符”(应该是's'),忽略了管道和/或空间之后的休息。
public static void morseToEnglish() {
String englishArray[] = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
String morseArray[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".--- ", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
//String translatedText = "";
//String newEnglishChar;
System.out.println("Enter Morse, separate each letter or digit with a single space, separate words with '|' ");
Scanner input = new Scanner(System.in);
String morseSentence = input.nextLine();
String[] words = morseSentence.split("|");
for (String word: words) {
String[] morseChars = word.split(" ");
for (String morseChar : morseChars) {
if (morseChar.isEmpty()) { continue; }
for (int i = 0; i < words.length; i++) {
if (morseChar.equals(morseArray[i])) {
System.out.println(englishArray[i]);
//newEnglishChar = englishArray[i];
//translatedText = translatedText + newEnglishChar;
}
}
}
}
//System.out.println(translatedText);
}我没有收到任何编译错误。代码工作正常,我只是告诉它错误的指令,所以我的输出并不像我所希望的那样。在我看来,Scanner正在输入摩尔斯,例如“.”,并把它翻译成“3e”而不是一个“s”。我试过例外情况(if(!.contains)) (或多或少),但它不起作用,而且似乎条件过高。我觉得我只是没有以正确的方式对待正确的对象。真的,如果第二种情况(两个莫尔斯字符,由一个空格隔开)起作用,我就没问题了。在这一点上,一个莫尔斯的角色可能要求太多了。最重要的问题是:我在哪里告诉Java,把三个点看作三个单独的字母是可以的?为什么?.我希望这是有帮助的。
发布于 2017-10-01 21:18:25
您的代码有两个问题:
|是一个https://stackoverflow.com/q/3674930/335858,所以您需要使用(例如,morseSentence.split("[|]") )和length:应该是morseArray.length而不是words.lengthmorseArray中的所有字符串都是唯一的,因此一旦找到匹配项,就可以在嵌套循环中设置break。
注意:--您可以从一个关联容器中受益,在没有循环(Map)的情况下完成映射。
发布于 2017-10-01 21:20:44
在您编写的代码中有几个问题。
Map,因为您正在关联2个值。这是你想要的一个实用版本
public static Map<String, String> init() {
HashMap<String, String> map = new HashMap<>();
map.put(".", "e");
map.put("...", "h");
//... All the other letters
return map;
}
public static void main(String ... args) {
Map<String, String> map = init();
System.out.println("Enter Morse, separate each letter or digit with a single space, separate words with '|' ");
Scanner input = new Scanner(System.in);
String morseSentence = input.nextLine();
for (String word: morseSentence.split("\\|")) {
for (String morseChar : word.split(" ")) {
if (!morseChar.isEmpty()) {
System.out.print(map.get(morseChar));
}
}
System.out.print(" ");
}
}https://stackoverflow.com/questions/46516863
复制相似问题