Подсчитывайте повторяющиеся элементы в Java без использования циклов или импорта

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