因此,我正在努力弄清楚如何正确地获得价值。所有的数学都是正确的,但它只是说明整数。例如,当我输入数字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);
}
答案 0 :(得分:2)
您必须将avg表达式的分子中的总和转换为double或在分母中使用double:
avg =((double)(a + b + c)/ 3);
或
avg =((a + b + c)/ 3.0 );
答案 1 :(得分:0)
当您使用右侧的所有int
时,答案会在分配给int
之前计算为double
。这就是为什么你得到一个圆满的答案。
要修复,一个选项是为所有分母添加小数位,如此
avg = ((a + b + c) / 3.0d);
这将强制在double
答案 2 :(得分:0)
两个int
之间的分隔将返回int
。要导致返回double
的除法,其中一个操作数必须是double
,如下所示:
avg = ((a + b + c) / 3.0);
答案 3 :(得分:0)
这就是运营商在Java中的工作方式。如果你有任何算术运算,比如除法,其中两个操作数都是整数,那么运算符将产生一个整数。在这种分工操作中可能会丢失一些信息。
在您的情况下,虽然您将结果赋值给double类型的变量,但在除法运算符完成后执行赋值运算符。
如果您不想丢失信息,可以将任何操作数类型转换为所需类型(在您的情况下,加倍)。
avg = (double)(a + b + c) / 3;
或者
avg = (a + b + c) / (double)3;
现在,在上面的语句中,除法运算符有两个不同类型的操作数。因此结果将是两者中优越的类型。