Мой код отлично работает при кодировании обычного текста в азбуку Морзе, но когда я пытаюсь перевести другим способом, я получаю ошибку индекса за пределами границ. Не знаю, почему?
import java.util.HashMap;
public class MorseCode {
private final String alphabet = "abcdefghijklmnopqrstuvwxyz0123456789 ";
private final String[] morse = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---",
".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--", "....-", ".....",
"-....", "--...", "---..", "----.", "-----", "|"};
private HashMap<String, String> toText;
private HashMap<String, String> toCode;
public MorseCode() {
toText = new HashMap<>();
toCode = new HashMap<>();
char[] alphaArray = alphabet.toCharArray();
for(int i = 0; i < morse.length; i++) {
toCode.put(morse[i], String.valueOf(alphaArray[i]));
toText.put(String.valueOf(alphaArray[i]), morse[i]);
}
}
public String encode(String s) {
s = s.toLowerCase();
String encoded = "";
char[] chars = s.toCharArray();
for(int i = 0; i < s.length(); i++) {
for (HashMap.Entry<String, String> entry : toCode.entrySet()) {
if (String.valueOf(chars[i]).equals(entry.getValue())) {
encoded += entry.getKey() + " ";
}
}
}
return encoded;
}
public String decode(String s) {
s = s.toLowerCase();
String decoded = "";
for(int i = 0; i < s.length(); i++) {
for (HashMap.Entry<String, String> entry : toText.entrySet()) {
if (morse[i].equals(entry.getValue())) {
decoded += entry.getKey();
}
}
}
return decoded;
}
}
Пытаясь найти решение, которое работает в обоих направлениях, любая помощь/совет будут оценены!
morse[i]
наs.charAt(i)
в своем методе декодирования. - person Erwin Bolwidt   schedule 14.12.2016s.toLowerCase()
азбукой Морзе для расшифровки? Вы добавляете пробелы в закодированный вывод, как вы удаляете эти пробелы? Пробовали ли вы писать какой-нибудь псевдокод, чтобы направлять ваши шаги? - person rafaelbattesti   schedule 14.12.2016