Мой переводчик азбуки Морзе не может определить, соответствует ли символ во введенной строке соответствующему элементу массива по умолчанию

 public static String morseToEng(String userInput)
{
    String[] userMorse = userInput.split("\\s+");
    String userString = "";

    for (int i = 0; i < userMorse.length; i++)
    {
        for (int q = 0; q < morse.length; q++)
        {
            if (morse[q] == userMorse[i])
            {
                userString += english[q] + " ";
            }
            else if (morse[q] == "|")
            {
                userString += " ";
            }
        }
    }
    return userString;
}

morse[ ] - это массив символов азбуки Морзе, которые соответствуют english[ ], то есть словарю символов английского алфавита (по порядку, конечно). Моя проблема в том, что, хотя есть случаи, в которых morse[q] == userMorse[i], программа не регистрирует его и всякий раз, когда я выполняю полную программу, а userString выходит в качестве своего инициализированного значения, которое просто "" (ничего такого). Я проверил отладчик, и функция userInput.split работает нормально, и userMorse действительно получается как массив входных символов кода Морзе в порядке. Что я здесь не так делаю? зеркальный метод с английского на азбуку Морзе работает отлично:

    public static String engToMorse(String userInput)
{
    char[] userChars = userInput.toCharArray();

    String userString = "";
    for (int i = 0; i < userChars.length; i++)
    {
        for (int q = 0; q < english.length; q++)
        {
            if (english[q] == userChars[i])
            {
                userString += morse[q] + " ";

            }
        }
    }

    return userString;
}

1 ответ

Решение

Как отметил в комментариях Маркос Васконселос .equals сравнивать объекты вместо ==, Это связано с тем, что в Java == сравнивает адрес памяти объекта, в отличие от примитивных значений, в которых он сравнивает значения, поэтому я думаю, что второй блок кода, который вы дали, работает нормально. .equals метод, когда переопределить с помощью класса, как String, вместо этого будет сравнивать значения, содержащиеся в объекте.

Поэтому я бы предложил либо изменить переменную userMorse на тип char, либо использовать метод сравнения для решения вашей проблемы в зависимости от необходимой функциональности программы.

Другие вопросы по тегам