0

因此,我很难弄清楚如何正确显示这些值。所有的数学都是正确的,但它只说明了整数。例如,当我输入数字 87、42 和 94 时,平均值应为 74.3 重复。然而它对我来说只有 74.0。最低分数的平均值也是如此。

Scanner keyboard = new Scanner(System.in);

int a;
int b;
int c;
double grade;
double avg;
double avg2 = 0;

System.out.print("Enter score number 1: ");
a = keyboard.nextInt();
System.out.print("Enter score number 2: ");
b = keyboard.nextInt();
System.out.print("Enter score number 3: ");
c = keyboard.nextInt();

avg = ((a + b + c) / 3);


System.out.println("The average is: " + avg);

if (a < b && a < c)
{
    System.out.println("The lowest score was: " + a);
    System.out.println("The average without the lowest score is: " + ((b + c) / 2));
    avg2 = ((b + c) / 2);
}


if (b < a && b < c)
{
    System.out.println("The lowest score was: " + b);
    System.out.println("The average without the lowest score is: " + ((a + c) / 2));
    avg2 = ((a + c) / 2);
}


if (c < a && c < b)
{
    System.out.println("The lowest score was: " + c);
    System.out.println("The average without the lowest score is: " + ((a + b) /2));
    avg2 = ((a + b) / 2);
}
4

4 回答 4

2

您必须将 avg 表达式的分子中的总和转换为双精度数或在分母中使用双精度数:

avg = ( (双) (a + b + c) / 3);

或者

平均值 = ((a + b + c) / 3.0 );

于 2013-02-06T02:36:16.273 回答
0

这就是运算符在 Java 中的工作方式。如果你有任何算术运算,比如除法,其中两个操作数都是整数,那么运算符将产生一个整数。在这种除法操作中可能会丢失一些信息。

在您的情况下,尽管您将结果分配给 double 类型的变量,但在除法运算符完成后执行赋值运算符。

如果您不想丢失信息,您可以将任何操作数类型转换为所需的类型(在您的情况下,转换为双精度)。

avg = (double)(a + b + c) / 3;

或者

avg = (a + b + c) / (double)3;

现在,在上述语句中,除法运算符有两个不同类型的操作数。所以结果将是两者中优的类型。

于 2013-02-06T04:24:32.913 回答
0

当您使用int右侧的所有 s 时,答案int在分配给 之前计算为double。这就是为什么你得到一个全面的答案。

要修复,一种选择是像这样为所有分母添加小数位

avg = ((a + b + c) / 3.0d);

这将迫使操作发生在double

于 2013-02-06T02:22:38.057 回答
0

两个ints 之间的除法将返回一个int。要导致返回 的除法double,其中一个操作数必须是 a double,如下所示:

avg = ((a + b + c) / 3.0);
于 2013-02-06T02:24:54.717 回答