1

我在显示平均小数时遇到问题。它一直显示 0.00 或 0.1。我试图把它加倍,但我仍然得到相同的结果。另外,我想将我输入的第一个整数包含在总和中,但我不知道如何。请帮助:

import java.io.*;
import java.util.*;

public class WhileSentinelSum 
{
static final int SENTINEL= -999;

public static void main(String[] args)
{
    // Keyboard Initialization
        Scanner kbin = new Scanner(System.in);

    //Variable Initialization and Declaration
        int number, counter;
        int sum =0;
        int average;

    //Input
        System.out.print("Enter an integer number: " );
        number = kbin.nextInt();
        counter=0;


    //Processing
    //Output
        while(number != SENTINEL)
        {
            counter++;
            System.out.print("Enter an  integer number: ");
            number = kbin.nextInt();
            sum += number;
        }

        if (counter !=0)
            System.out.println("\nCounter is: " + counter);
        else
            System.out.println("no input");

        average= sum/counter;
        System.out.println("The sum is " + sum);
        System.out.println("The average is " + average);


        System.out.println();

    }//end main
}//end class
4

5 回答 5

5

即使您声明averagedoublesumandcounter变量也是int,因此Java在将其分配给之前仍然使用整数除法average,例如5 / 10结果0而不是0.5

将变量之一转换double为除法之前强制进行浮点运算:

double average;

...
average = (double) sum / counter;

您可以通过在进入 while 循环之前处理它来将第一个数字包含在计算中(如果它不是哨兵值)。

于 2013-04-03T22:07:48.833 回答
1
average = sum/counter;

该行正在执行整数除法(即,它切断了真实结果的小数部分)。你应该把它改成

average = (double) sum / counter;  // perform double division, not int division

它首先转换sum为 a double,因此执行常规的双重除法。

请注意,您需要将average变量的类型更改为double.


只是为了说明我的观点:

int a = 3;
int b = 2;

System.out.println(a / b);
System.out.println((double) a / b);
1
1.5
于 2013-04-03T22:07:40.910 回答
1

看起来问题出在上面的行中

average = sum/counter;

即使你做averagea double,sum/counter仍然是整数除法,它会产生一个整数答案。你可以试着说

double average = ((double)sum)/counter;

另一种解决方案是制作sumorcounter类型doubleaverage制作double.

于 2013-04-03T22:08:02.253 回答
0

将总和和平均值初始化为加倍。使用 kbin.nextDouble()。

于 2013-04-03T22:09:34.107 回答
0

据说:永远不要使用doubleor float,当需要确切的结果时。你应该更喜欢BigDecimal。原语不使用大多数人期望的舍入模式。

于 2013-04-03T22:19:56.053 回答