数组错误的平均值(使用int)

时间:2014-12-02 12:22:38

标签: java arrays time runtime-error average

开始在这里感到沮丧。自我思想的菜鸟在这里。我正在关注John Deitel所着的“java how to program”,以及我的一位朋友(前CS学生)寄给我的一些非常随意的文档。 我编写了代码来计算int的平均值,这些平均值很好。 然后我想在double中测试它,但是当我按 ctrl + 1 时,即使“工具已成功完成”,也会继续出错。我有因为发现其他人的代码执行相同的任务,我有点理解,但我想知道我的代码有什么问题。

我已经尝试将racecounter设置为加倍以移除average = (double) total / raceCounter;,这会导致更多错误。

import java.util.Scanner;

public class RaceAvgNoNamesDouble
{
   public static void main( String[] args)
   {
      Scanner input = new Scanner( System.in );

      double total;
      int raceCounter;
      double racetime;
      double average;

      total = 0;
      raceCounter = 0;

      System.out.print( "Enter race time or -1 calculate: ");
      racetime = input.nextDouble();

      while (racetime != -1)
      {
        total = total + racetime;
        raceCounter = raceCounter + 1;
        System.out.print( "Enter race time or -1 calculate: ");
        racetime = input.nextDouble();
      }

      if ( raceCounter != 0)
      {
        average = (double) total / raceCounter;
        System.out.printf( "\nTotal of the %d races entered %d\n", raceCounter, total );
        System.out.printf( "Race average is %.2f\n", average);
      }
      else
         System.out.println( "No races were entered");
    }
  }

3 个答案:

答案 0 :(得分:0)

您不能将printf格式%d用于double,这就是问题,请使用%f,如下所示:

System.out.printf( "\nTotal of the %d races entered %.2f\n", raceCounter, total );

有关更多信息,请参阅this tutorial


另请注意,average = (double) total / raceCounter;中的广告素材是多余的

答案 1 :(得分:0)

我没有看到任何逻辑错误,除了您打印的方式可能无法正常工作,因为总计是双倍的'。您需要将其更改为 -

  

System.out.printf(" \ n%d个比赛的总数输入%。2f \ n",   raceCounter,total);

答案 2 :(得分:0)

你的第一个printf声明似乎在犯了一个小错误。由于total是双倍的,您应该使用%f格式而不是%d格式。