加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 05:18:05 所属栏目:Java 来源:网络整理
导读:我正在测试一个包含随机生成的数字的不同文本文件的程序.构建 Java程序是为了从文本文件中将这些数字加在一起,取这些数字的平均值,然后(使用IF语句)从文本文件中查找大于平均值的数字,将所述值放入ArrayList中,并打印平均值和ArrayList作为输出.但是,出于某
我正在测试一个包含随机生成的数字的不同文本文件的程序.构建 Java程序是为了从文本文件中将这些数字加在一起,取这些数字的平均值,然后(使用IF语句)从文本文件中查找大于平均值的数字,将所述值放入ArrayList中,并打印平均值和ArrayList作为输出.但是,出于某种原因,当我使用不同的文本文件运行我的程序时(我使用两个测试,其中一个工作,而另一个当前没有).在shell中打印的结果是不正确的 – 大多数值都大于平均值,但我得到的是一些不是,并且最多有三个.

这是我的代码:

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 ();
    }

}

从文件中运行时,我的平均值为79.67,但我的输出如下所示:

The value(s) greater than the mean,79.67,are (is):
128.0
93.0
143.0
111.0
95.0
116.0
136.0
129.0
141.0
78.0    <-- NOTICE: value is less than the average
93.0
105.0
90.0
90.0
144.0
116.0
136.0
138.0
75.0    <-- NOTICE: value is less than the average
80.0
126.0
75.0    <-- NOTICE: value is less than the average
80.0
98.0
114.0
116.0
86.0
78.0    <-- NOTICE: value is less than the average
123.0
145.0
103.0
111.0
91.0
134.0
119.0
91.0
121.0
113.0
129.0
91.0
116.0
85.0
85.0
126.0
145.0
98.0
115.0
83.0
127.0
119.0
97.0
125.0
121.0
123.0
86.0
108.0
100.0
134.0

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

解决方法

当您决定是否将数字添加到大于均值的值列表中时,您可以根据此处处理的数字的部分平均值来确定此决策.这就是为什么你在输出元素中看到低于最终平均值的原因.

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读