首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的程序没有输出算术平均值的正确十进制数。我怎么才能修复它?

问我的程序没有输出算术平均值的正确十进制数。我怎么才能修复它?
EN

Stack Overflow用户
提问于 2020-04-20 07:10:38
回答 3查看 117关注 0票数 0

我需要显示用户输入的一系列整数的正确算术平均值。如果用户输入6、9、7和4,则平均值应为6.5,但显示为6.0。为什么会发生这种情况?我使用ArrayList来存储所有的整数。

代码语言:javascript
复制
import java.util.Scanner;
import java.util.*;
import java.util.Collections;

public class QuizScoreStatistics
{
    public static void main(String[] args) {
        List<Integer> Scores = new ArrayList<Integer>();

        Scanner input = new Scanner(System.in);
        int i = 0;
        int a = 0;

        while(a != 99) {
            System.out.println("Enter scores");
            a = input.nextInt();
            if(a != 99) {
                if ( a > 10 || a < 0) {
                    System.out.println("Score must be between 10 and 0");
            }
            else {
                Scores.add(a);
            }

            i++;
        } 
    }
        int max = Collections.max(Scores);

        int min = Collections.min(Scores);

        int sum = 0;

        double averg = 0;

        for( i = 0; i <= Scores.size() - 1; i++) {
             sum += Scores.get(i);
        }
        averg = sum / Scores.size();

        System.out.println("Scores entered " + i);

        System.out.println("Highest score " + max);

        System.out.println("Lowest score "+ min);

        System.out.println("Average: "+ averg);
    }
}
EN

回答 3

Stack Overflow用户

发布于 2020-04-20 07:18:15

我不会试图透露整个问题,我认为只要你朝着正确的方向推动,你自己可能会回答这个问题。

你正确地识别出你的averg是一个双精度的,因为你的答案可能是6.7或2.3之类的东西。这是一个正确的假设!然而,在你的“算术过程”中,你使用整数来做除法,这将是一个整数。我将重复两个整数的实际除法,你能看到bug来自哪里吗?

如果您需要更深入地了解此解决方案的确切解决方案,我会在这里向您指出https://programming.guide/java/wrong-results-for-division.html

票数 2
EN

Stack Overflow用户

发布于 2020-04-20 07:15:37

试试averg = (1.0 *sum) / Scores.size();

因为int/int => int而是double/int=>double

票数 1
EN

Stack Overflow用户

发布于 2020-04-20 08:07:42

好的,这就是运算符"/“的工作方式。

代码语言:javascript
复制
int / int => int
int / float => float
float / int => float

由于您正在进行int除法(int/int),因此结果将是一个int,丢失小数信息。如果您希望除法是浮点型或双精度型,您有两个选择,要么将和声明为双精度型,要么直接转换除法,这样它就变成了双精度除法而不是整型除法。

代码语言:javascript
复制
averg = (double) sum / Scores.size();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61312861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档