#java #if-statement #recursion
Вопрос:
В учебных целях я попытался закодировать программу, которая подсчитывает, как часто данное число появляется в заданном массиве целых чисел. Затем проверяет, четное или нечетное число. Без использования какого-либо импорта или циклов. Я попытался решить ее рекурсивно. например:
(3, new int[]{3,3,4,5,3,3,2,1})
Есть 4 тройки, поэтому программа должна проверить, четные они или нечетные.
После нескольких дней кодирования и нерабочего кода я решил спросить здесь: какие-либо решения?
public static int evenNumberOf(int num, int[] numarr) { int i = 0 ; int counter = 0; if(a == null || a.length == 0) { return false; } else { if(a[i] == a.length -1 ) { if(counter % 2 == 0) { System.out.println("true"); return true; } else System.out.println("false"); return false; } else { if(a[i] == n) { counter ; i ; return evenNumberOf(n,a) ; } else { i ; return evenNumberOf(n,a) ;
Комментарии:
1. Можете ли вы поделиться написанным вами кодом, чтобы мы могли попытаться выяснить, в чем вы ошиблись?
2. Извините, я так и сделаю!
3. Пожалуйста, отправьте свой полный код. Где находятся
a
иn
объявлены? Как вы возвращаетесьtrue
, когда ваша функция говорит, что она возвращаетсяint
? Что вы подразумеваете под «не работает»? Но ваша проблема, похоже, заключается в том, что вы начинаете поиск в начале массива каждый раз, когда вызываете свою функцию.4. Как вы можете
return false
илиreturn true
в методе, который должен возвращать int ?
Ответ №1:
Подсказка:
Если вы пытаетесь сделать это рекурсивно, вы можете сделать это быстро с помощью «разделяй и властвуй». Разделите массив пополам, подсчитайте каждый подмассив и объедините результаты. Убедитесь, что базовый случай пустого массива/массива с одним элементом обработан правильно.
Комментарии:
1. может быть, я неправильно понял, но я думаю, что оп хочет подсчитать повторения только заданного числа (
3
в примере), что можно очень легко сделать рекурсивно.2. Ах, я понимаю, это было бы гораздо проще. Я тоже неправильно понял.
3. Да, извините за недоразумение. Я часто не могу выразить то, что хочу сказать по-английски.
Ответ №2:
Попробуй это:
public static void main(String[] args) throws Exception{ System.out.println(evenNumberOf(2, 0, new int[]{2,0,3,7,6,11,1,2}, 0)); } //arr should not be empty, index and count gt;= 0 public static int evenNumberOf(int num, int index,int[]numarr, int count) { if(index gt;= numarr.length) return count; if(numarr[index] == num ) { count ; } return evenNumberOf(num, index, numarr, count); }
Вы можете добавить вспомогательный метод, чтобы упростить вызов :
public static int evenNumberOf(int num, int[] numarr) { return evenNumberOf(num, 0, numarr,0); }