查找数组中的总和,平均数和最大数

时间:2017-10-19 19:41:22

标签: java arrays

有学校任务来查找数组中的总和,平均数和最大数。输入和分析都必须是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();

3 个答案:

答案 0 :(得分:2)

问题是整数除法。

在Java中,当你除以两个整数时,你得到一个整数(丢失小数点以外的任何东西)。

即。 10 / 3 = 3

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

所以而不是:

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

你想做

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

注意:

你可以通过删除int数组来提高你的解决方案的效率(除了你见过的最大的东西之外还关心什么吗?)并在循环结束时进行除法。

答案 1 :(得分:1)

问题在于,arrayx[i]arrayx.length都是整数,a.k.a整数。
因此,当划分时,使用整数除法,其取整除部分的结果。 例如,整数除法中的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.

实际上,根本不需要数组 - 只在循环范围内使用它的项目,无论如何都使用它,并且你知道它在编译时的长度。

答案 2 :(得分:0)

您检查最大值也不正确。

如果您向计划提供输入:{-3, -2, -1, 0, -100}

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

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

i等于已经处理的int的数量。