查找大于平均值的数字 - 为什么我的IF语句不能正常工作?

时间:2014-11-28 18:21:16

标签: java input average inequality

我正在使用包含随机生成的数字的不同文本文件来测试程序。构建Java程序是为了从文本文件中将这些数字加在一起,取这些数字的平均值,然后(使用IF语句)从文本文件中查找大于平均值的数字,将所述值放入{ {1}},并打印平均值和ArrayList作为输出。但是,出于某种原因,当我使用不同的文本文件运行我的程序时(我使用两个测试,其中一个工作,而另一个当前没有)。在shell中打印的结果不正确 - 大多数值都大于平均值,但是我得到了一些不是,并且最多只有三个。

这是我的代码:

ArrayList

从文件中运行时,平均得到79.67,但我的输出如下:

package homework.pkg23.average;

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;

public class Homework23Average {

    public static void main(String[] args) {
        ArrayList exes = new ArrayList ();
        double x = 0;
        double y = 0;
        Scanner inputStream = null;

        try {
            inputStream = new Scanner (new File ("MyInput.txt"));
        }
        catch (FileNotFoundException e) {
            System.out.println ("File not found, program aborted:");
            System.exit (1);
        }
        int count = 0;
        while (inputStream.hasNextDouble ()) {
            count ++;
            x = inputStream.nextDouble ();
            y += x;
            if (x > y/count) // x values greater than the mean
                exes.add (x);
        }
        System.out.println ("The value(s) greater than the mean, " 
                            + y/count + ", are (is):");
        exes.forEach (System.out::println);
        inputStream.close ();
    }

}

我无法弄清楚为什么这些价值观正在滑落。我在另一个包含较少输入值的文本文件上测试了这个程序,一切正常。我是Java的新手,因为这是我在“Hello World”程序之后的第二个程序,而且我没有Java语法的广泛知识。

3 个答案:

答案 0 :(得分:10)

您将值与运行平均值进行比较,而不是最终平均值。第n项的比较没有考虑第n + 1项及以后的项目。

答案 1 :(得分:7)

当您决定是否在The value(s) greater than the mean列表中添加数字时,您可以根据此处处理的数字的部分平均值来做出此决定。这就是为什么你在输出元素中看到低于最终平均值的原因。

例如,假设第一个元素是1而第二个元素是2.那么前两个元素的平均值是1.5,并且因为2> 1。 1.5,您将它添加到输出列表中。但是,如果下一个元素大于2,则最终平均值可能高于2,因此您的输出将具有低于最终平均值的数字。

你的代码也可能在另一个方向犯错误 - 输入开头附近的数字可能被误认为低于平均值,即使它高于最终平均值。

为了获得正确的输出,您必须进行两次迭代。第一个会计算平均值并存储所有输入数字,第二个会发现数字高于平均值。

答案 2 :(得分:1)

如果你希望这个工作,那么你必须经历两次输入,一次计算平均值,一次计算出哪些超过它。

当你读到第一个值时,你不知道它的意思是什么,所以你不能决定它是否大于它!

关键是平均值是输入整体的属性,所以在你全部考虑之前,你无法知道它们的意思。