2015-02-03 3 views
0

Я пытаюсь вернуть сумму моего массива, однако вместо того, чтобы суммировать массив с помощью рекурсии, сумма массива возвращается только как 0. Я нахожусь там, где Думаю, я могу что-то пропустить. Дополнительный набор глаз поможет.Попытка вернуть сумму массива, ошибка вызова метода

public class JavaSandbox { 

/** 
* @param args the command line arguments 
*/ 
public static int sumDanceScore(int danceScore[], int first, int last) 
{ 


    if (first > last) 
    { 
     return 0; 
    } 
else 
    { 
    int total = sumDanceScore(danceScore,first+1,last) + danceScore[first]; 
    return total; 
    } 
} 
    public static void main(String[] args) 
{ 
    Scanner kbd = new Scanner(System.in); 
    System.out.println("Enter number of contestants : "); 

    int numContest = kbd.nextInt(); 
    int danceScore[] = new int[numContest + 1]; 
    int first = 0; 
    int last = danceScore.length - 1; 

    System.out.println("Enter dance scores: "); 

    int numContestIndex; 
    for (numContestIndex = 1; numContestIndex <= numContest; numContestIndex++) { 
    danceScore[numContestIndex] = kbd.nextInt(); 
} 

    int danceScoreTotal = sumDanceScore(danceScore, first, last); 
    System.out.println("SUM DANCE SORE METHOD: "+danceScoreTotal); 
    for(int danceScoreIndex = 1; danceScoreIndex <= danceScore.length-1; danceScoreIndex++) 
    { 
    int danceScoreShare = danceScore[danceScoreIndex]/danceScoreTotal; 
    System.out.println("DANCE SCORE SHARE "+danceScoreShare); 
    } 

} 

} 
+0

помочь таким пользователям просматривать код, отформатируйте код –

+0

Извините, позвольте мне попытаться исправить это был длинный день. –

+3

Вы запрашиваете ввод после вычисления суммы – humblerookie

ответ

4

В своем коде вы вызываете вашу функцию sumDanceScore перед заполнением массива. Таким образом, вы передаете массив, заполненный нулями (как значениями по умолчанию) для функции.

0

Как исправить:

  • индекс first инициализации до нуля.
  • функции sumDanceScore после заполнения массива

Как рекурсии работы на sumDanceScore?

Первый: sumDanceScore - для first == 0 и last == danceScore.length - 1 массив. Затем sumDanceScore оставляет исходный элемент (в позиции first) диапазона и вызывает следующий sumDanceScore со сдвинутым положением на единицу. Это first == 1, и эта переменная отличается от того, когда вы звоните sumDanceScore в первый раз. Сместить каждый раз first, до first соответствует last.

Это правильно main тело:

Scanner kbd = new Scanner(System.in); 
System.out.println("Enter number of contestants : "); 

int numContest = kbd.nextInt(); 
int danceScore[] = new int[numContest + 1]; 
int first = 0; 
int last = danceScore.length - 1; 

System.out.println("Enter dance scores: "); 

int numContestIndex; 
for (numContestIndex = 1; numContestIndex <= numContest; numContestIndex++) { 
    danceScore[numContestIndex] = kbd.nextInt(); 
} 

int danceScoreTotal = sumDanceScore(danceScore, first, last); 

System.out.println("SUM DANCE SORE METHOD: " + danceScoreTotal); 
+0

Анатолий. Не могли бы вы сказать мне, почему, когда я пытаюсь разделить мой индекс массива danceScore на sumDanceScore, у меня есть 0 вместо всех моих слотов массива danceScore. Я редактировал код. –

+0

http://stackoverflow.com/users/3465146/svichkarev-anatoly –

+0

@davidwillams Редактировать ответ с объяснением того, как рекурсия работает. –

Смежные вопросы