【问题标题】:Trying to return sum of array, method call error试图返回数组的总和,方法调用错误
【发布时间】:2015-02-03 18:26:46
【问题描述】:

我试图返回我的数组的总和,但是我没有使用递归对数组求和,而是数组总和返回为 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);
  }

}

}

【问题讨论】:

  • 为了帮助 SO 用户查看您的代码,请格式化代码
  • 抱歉,让我尝试修复它已经漫长的一天。
  • 计算总和后请求输入

标签: java for-loop recursion methods


【解决方案1】:

在您的代码中,您在填充数组之前调用您的函数sumDanceScore。因此,您将一个用零填充的数组(作为默认值)传递给函数。

【讨论】:

    【解决方案2】:

    如何解决:

    • 索引first初始化为零。
    • 函数sumDanceScore填充数组后

    递归如何在您的sumDanceScore 上工作?

    首先,sumDanceScorefirst == 0last == danceScore.length - 1 数组调用。然后,sumDanceScore 离开范围的初始元素(在first 位置)并调用 next 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);
    

    【讨论】:

    • Anatoly 你能告诉我为什么当我尝试将我的 danceScore 数组索引除以 sumDanceScore 时,我的所有 danceScore 数组槽都用 0 代替。我已经编辑了代码。
    • @davidwillams 编辑答案并解释递归是如何工作的。
    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2014-06-19
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多