Строковая функция Java

#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');
  

И посмотрите, что вы получите. Вы будете работать над тем, чтобы обе функции давали одинаковый результат, одна с рекурсией, а другая с использованием цикла. Работа с ручкой и бумагой поможет вам понять это, поэтому вы можете объяснить своему преподавателю, чего пытается достичь каждый метод.

Ответ №4:

Обе показывают один и тот же результат:
1. Способ 1
2. Способ 2


PS: Вы пробовали запускать код и проверять с помощью o / p?