#java #string #indexing #substring
#java #строка #индексирование #подстрока
Вопрос:
Опишите следующие две функции и то, выполняют ли они одну и ту же задачу —
public int Jane1(String input, char aChar) {
int count = 0;
int index = input.indexOf(aChar);
while (index >= 0) {
count ;
index = input.indexOf(aChar, index 1);
}
return count;
}
public int Jane3(String input, char aChar) {
int index = input.indexOf(aChar);
if (index < 0) return 0;
return Jane3(input.substring(index 1), aChar) 1;
}
Я думаю, что они не выполняют одну и ту же задачу, однако я не уверен в объяснении. Функция Jane3 использует рекурсивный вызов для возврата длины введенной строки, где в качестве Jane1 возвращается длина строки. Изо всех сил пытаюсь разобраться в разнице между возвращаемой вложенной строкой (которая, я думаю, является результатом строки) и индексом?
Комментарии:
1. ради бога, не называйте методы нерелевантными именами.
2. @Ahmet — это домашнее задание. Он не имел никакого отношения к именам.
3. в моей школе баллы не начисляются, если вы не соблюдаете соглашения об именовании и правила синтаксиса.
Ответ №1:
Они оба выполняют одну и ту же задачу. Подсчитайте, сколько раз aChar
появляется в input
. Первая использует перегруженную версию indexOf
и цикл для достижения результата. Вторая версия разделит входные данные при первом появлении aChar
и вызовет себя рекурсивно для второго деления пополам. Результатом является целое число (0, если вхождения не происходит, или 1 количество раз, когда символ был найден во второй половине).
PS: Почему бы вам не написать основной класс и не запустить / отладить оба этих метода для разных входных данных? Это лучший способ обучения…
Ответ №2:
Jane1 использует цикл while, в то время как Jane3 использует рекурсию. Это должно быть хорошим началом. Обе возвращают количество вхождений символа в строку.
Ответ №3:
Что я бы посоветовал вам сделать, так это взять строку (придумать что-нибудь) и с помощью ручки и бумаги проработать каждый метод. Например
Jane1("This is my homework", 'i');
Jane3("This is my homework", 'i');
И посмотрите, что вы получите. Вы будете работать над тем, чтобы обе функции давали одинаковый результат, одна с рекурсией, а другая с использованием цикла. Работа с ручкой и бумагой поможет вам понять это, поэтому вы можете объяснить своему преподавателю, чего пытается достичь каждый метод.