Мне трудно понять практическое задание, которое я получил при подготовке к тесту, который у меня есть через несколько дней. Вот код, который у меня есть:

/**
 * Check if the first letter in this word matches the given letter c
 * @param word a word
 * @param c - a character a-z upper or lower case
 * @return true if first letter in word matches c
 */
@Override
public boolean startsWith(String word, char c) {
}   

}

Я должен написать код, который будет соответствовать имеющимся у меня тестовым требованиям, в отдельном файле. Весь тестовый код мне уже предоставлен, и моя единственная задача - написать код, который возвращает истину, если первая буква в String word совпадает с char c. Неважно, написана ли буква в верхнем регистре или в нижнем регистре, поскольку файл с тестовым кодом содержит код, который решает эту проблему. Подводя итог: я думаю, что я прошу помощи в понимании того, что именно я должен делать? Я попытался написать что-то в этом роде, но я не думаю, что это правильно, и я думаю, что полностью игнорирую и пренебрегаю огромной частью задачи:

@Override
public boolean startsWith(String word, char c) {
    if (word.startsWith(word, c)) {
        return true;
    } else {
        return false;
    }
}

}

-1
mnm1210 14 Сен 2020 в 19:05

3 ответа

Лучший ответ

Проблема здесь в том, что вы неправильно поняли аргументы startsWith() метод. Первый аргумент - это префикс. Это должен быть ваш персонаж, c. Второй аргумент - это смещение, с которого нужно начать поиск этого префикса. В данном случае вы хотите, чтобы это было 0. На самом деле вам нужно word.startsWith(Character.toString(c), 0). Причина, по которой ваш исходный код не генерировал исключение времени компиляции, заключается в том, что символ c просто обрабатывался как число и преобразовывался в int, чтобы соответствовать заголовку метода {{ X4}} метод.

2
Charlie Armstrong 14 Сен 2020 в 16:13

Строка начинается с документации метода из oracle:

startWith (префикс строки, смещение int)

Проверяет, начинается ли подстрока этой строки, начинающаяся с указанного индекса, с указанным префиксом.

Но вам нужно проверить, начинается ли первый символ с символа c. Таким образом, вы можете использовать перегруженную версию startWith (String word) (из String). вот мои 2 варианта:

Опция 1:

@Override
public boolean startsWith(String word, char c) {
    return word.charAt(0) == c; 
}

Вариант 2:

@Override
public boolean startsWith(String word, char c) {
    return word.startsWith(String.valueOf(c); 
}

Обратите внимание, что вы можете улучшить этот метод, проверив нулевое значение аргумента «слово», как указано в ответах. например:

@Override
public boolean startsWith(String word, char c) {
    return word != null && word.startsWith(String.valueOf(c); 
}
0
MoRtEzA TM 14 Сен 2020 в 16:33

Было бы очень полезно узнать, где найти JavaDocs для той версии стандартной библиотеки Java, которую вы используете. Те для Java 10 находятся здесь: https: / /docs.oracle.com/javase/10/docs/api/index.html?overview-summary.html, а также несколько других версий поблизости. С их помощью вы можете искать интересующие классы, например java.lang.String, чтобы определить, какие методы они предоставляют, и узнать подробности аргументов и поведения этих методов.

В частности, вы можете рассмотреть возможность проверки нескольких методов startsWith() String, и в этом случае вы обнаружите, что они определяют, является ли объект String , для которого они вызываются начинается с определенной строки или строки, соответствующей определенному шаблону. Это не то, как вы пытаетесь использовать тот, который соответствует аргументам вашего вызова.

Другой ответ описывает, что вы могли бы применить String.startsWith() к своей проблеме, но это не единственный вариант. Просматривая доступные методы, можно найти несколько способов получить отдельные char из String, например метод charAt(). Если вам действительно не нужно беспокоиться о регистре (что для меня звучит удивительно), то лично я был бы склонен извлечь первый символ (с индексом 0) и сравнить его с интересующим символом. То есть я бы начал здесь:

char firstChar = word.charAt(0);

Остальное оставлю в качестве упражнения.

0
John Bollinger 14 Сен 2020 в 16:31