【问题标题】:Find sum, average and biggest number in an array在数组中查找总和、平均值和最大数
【发布时间】:2017-10-20 04:02:11
【问题描述】:

有一项学校任务是在一个数组中找到总和、平均数和最大数。输入和分析都必须是 if 循环。这就是我所做的,但总和不起作用,因此平均值错误也是错误的。我可以改进什么?

    double average = 0;
    int biggest = 0;

    int [] arrayx = new int[5];
    Scanner stdIn =  new Scanner(System.in);

    for (int i = 0; i < arrayx.length; i++) {
        System.out.println("Write an integer: ");
        arrayx[i] = stdIn.nextInt();
        average += arrayx[i] /arrayx.length;

        if(biggest == 0 || arrayx[i] > biggest)
        {   
            biggest = arrayx[i];            
        }   
    }
    System.out.println("Sum is: " + (average*arrayx.length));
    System.out.println("Average is: " + average);
    System.out.println("Biggest number is: " + biggest);
    stdIn.close();

【问题讨论】:

  • 您遇到错误了吗?
  • 可能是整数除法。
  • 没有错误,只是错误的数字,通常比正确的和高5-10个数字
  • @Znarvi 我的答案假设整数除法,这实际上会给你一个比预期“更小”的总和,但你看到的总和更大?此输入中有负数吗?
  • 计算平均值的更简单方法是将所有项目相加,然后将 total 除以项目数。不要将每个项目除以项目的数量。

标签: java arrays


【解决方案1】:

问题是整数除法。

在 Java 中,当您将两个整数相除时,您会得到一个整数(丢失小数点后的任何内容)。

即。 10 / 3 = 3

如果您想要10 / 3 = 3.33333,您需要将其中一个整数转换为加倍。

所以而不是:

average += arrayx[i] /arrayx.length;

你想做的

average += ((double) arrayx[i]) /arrayx.length;

注意:

您可以通过摆脱 int 数组(除了您见过的最大数组之外,您是否关心其他任何内容?)并在循环的最后进行除法,从而使您的解决方案更加高效。

【讨论】:

    【解决方案2】:

    问题在于arrayx[i]arrayx.length 都是整数,也就是整数。
    因此,除法时,使用整数除法,取除法结果的整个部分。 例如,整数除法中的7 / 23

    因此,您每次都向avarage 添加一个整数,而您想要一个浮点除法。
    您可以将其中一个数字强制转换为 double 以强制进行 FP 除法:

    average += (double)arrayx[i] /arrayx.length;
    

    一般情况下,最好将总和计算为整数,然后再进行除法:

    sum += arrayx[i];
    ...
    double average = (double)sum / arrayx.length; // Casting here too for FP division.
    

    实际上,您根本不需要数组 - 您只在循环范围内使用它的项目,当您拥有它们时,并且您知道它在编译时的长度。

    【讨论】:

      【解决方案3】:

      您对最大值的检查也不正确。

      如果您向您的程序提供输入:{-3, -2, -1, 0, -100}

      在循环结束时,最大值将设置为等于-100

      您的 if 语句应更改为: if(i == 0 || arrayx[i] &gt; biggest)

      其中i 等于已处理的int 的数量。

      【讨论】:

        猜你喜欢
        • 2014-06-11
        • 2020-06-17
        • 1970-01-01
        • 2018-09-04
        • 2017-07-24
        • 1970-01-01
        • 1970-01-01
        • 2021-06-18
        • 1970-01-01
        相关资源
        最近更新 更多