2017-01-07 4 views
-1

В основном я не знаю, почему мое целое число n не получает больше.
Спасибо за каждый ответ!Приращение целочисленного числа в рекурсивном методе не работает (LinkedList)

public int n; 

    public int firstIndexOf(T val) { 
    if (val == this.getValue()) { 
     return n; 
    } else { 
     if (val != this.getValue() && this.next != null) { 
      n++; 
      return this.next.firstIndexOf(val); 

     } else { 
      return -1; 
     } 
    } 
    } 
+0

Я предполагаю, что это Java? Вы должны включить такие детали в свой вопрос. – abigperson

+0

Поскольку элемент, который вы ищете, всегда находится в первом узле, или список содержит только один элемент. NB 1. Это плохое программирование. Небезопасно, для начала. Вы должны передать новое значение 'n' в качестве параметра. 2. Вам не нужен первый тест!! =. Вы уже находитесь в 'else', который так говорит. 3. Вы должны сравнивать значения с 'equals()', а не '=='. – EJP

+0

ладно спасибо! проблема есть, является частью студенческой задачи, im довольно новой в java, вот почему ее проблема плохая. да, ваше право, я могу удалить первое! = спасибо. им не разрешено добавлять параметры. Возможно, у вас есть решение? иначе я могу сделать это с помощью нерекурсивного метода. Редактировать: я думаю, у меня есть идея, я делаю другой метод, который копирует val и имеет параметр n. надеюсь, что это работает! – HosenHochsteckManuel

ответ

0

Приращение (п ++) был в неправильном состоянии проверки:

private int n = 0; 

    public int firstIndexOf(int val) { 
     if (val == this.getValue()) { 
      return n+1; //This is were the increment should happen 
     } 
     else { 
      if (this.next != null) { 
       return this.next.firstIndexOf(val); 
      } else { 
       return -1; 
      } 
     } 
    } 

Кроме того, если вы хотите, чтобы сосчитать все элементы в связанном списке, которые имеют такое же значение, как вал, вы можете использовать это:

private int n = 0; 

public int firstIndexOf(int val) { 
    if (val == this.getValue()) { 
     if (this.next != null) { 
      return 1 + this.next.firstIndexOf(val); 
     } 
     else { 
      return 1; 
     } 
    } else { 
     if (this.next != null) { 
      return this.next.firstIndexOf(val); 

     } else { 
      return 0; 
     } 
    } 
} 
+0

приятно, спасибо! – HosenHochsteckManuel