Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / рекурсия / 5 сообщений из 5, страница 1 из 1
26.11.2020, 21:52
    #40022568
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рекурсия
Подскажите что не так делаю

2. Создайте рекурсивный метод, который принимает на вход единственный аргумент - число, и возвращает количество цифр 7 в этом числе. Циклы использовать запрещено, можно использовать только рекурсивные вызовы.

Пример:
System.out.println(count7(717771237)); // 5

public class Task2 {
public static void main(String[] args) {
count7(177);

}
private static int count7(int number){
int j = 0;
int counter=0;
String strNumber = Integer.toString(number);
int i = strNumber.length();

if (j==i){
return counter;
}

if ( strNumber.substring(0,1).equals("7")) {
System.out.println(strNumber.substring(0,1));
counter++;
}
int recur = count7(Integer.parseInt(strNumber.substring(j+1,i)));
return counter + recur;
}
}

Не считается counter
...
Рейтинг: 0 / 0
26.11.2020, 23:36
    #40022591
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рекурсия
x17.mstu,

что значит "Не считается counter" ?
...
Рейтинг: 0 / 0
27.11.2020, 00:37
    #40022597
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рекурсия
1. Используй форматирование, уважай чужое время на просмотр твоего кода.
2. Твой parseInt Integer.parseInt в последнем "проходе" получает строку "" которую ясен перец не может распознать как число.
Вот с выносом в переменную, отдебаж на строке String substring = strNumber.substring(j + 1, i); и увидишь. А вообще чот как-то коряво всё, тут можно, если подумать, сделать гораздо проще. Через регексы собрать нужные символы, например, и потом посчитать длину строки.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public class Task2 {
    public static void main(String[] args) {
        System.out.println(count7(71)); // 5
    }

    private static int count7(int number) {
        int j = 0;
        int counter = 0;
        String strNumber = Integer.toString(number);
        int i = strNumber.length();

        if (j == i) {
            return counter;
        }

        if (strNumber.startsWith("7")) {
            System.out.println(strNumber.substring(0, 1));
            counter++;
        }
        String substring = strNumber.substring(j + 1, i);
        int recur = count7(Integer.parseInt(substring));
        return counter + recur;
    }
}
...
Рейтинг: 0 / 0
27.11.2020, 00:43
    #40022598
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рекурсия
а не, через регексы даже собирать не надо вот первое что через гугл нашлось
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
import java.util.regex.*;

class Task2 {
    public static void main(String[] args) {
        String seven = "1227442723237477";
        Pattern pattern = Pattern.compile("7");
        Matcher matcher = pattern.matcher(seven);

        int count = 0;
        while (matcher.find())
            count++;

        System.out.println(count);    // 5
    }
}
...
Рейтинг: 0 / 0
27.11.2020, 03:50
    #40022618
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рекурсия
Код: java
1.
2.
3.
4.
int count7(int i){
    if (i<10) return i==7 ? 1 : 0;
    return count7((int)(i/10)) + count7(i%10);
}
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / рекурсия / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]