0

即使在 tprice = 75 + (2/10) * 距离发生后,它仍将最小值输入为 26。该程序不允许包含 if 语句,因此 Math.Min(tprice, cprice); 希望这是足够的信息。

class UserCalc {

    public static void main(String [] args) {
        int cPrice, tPrice, distance, selfCont, minValue;
        double refund;

        Scanner scanner = new Scanner(System.in);

        System.out.println("Please enter the distance by car");
        distance = scanner.nextInt();

        System.out.println("Please enter the self contribution");
            selfCont = scanner.nextInt();
            scanner.nextLine();

        tPrice = 75 + (2/10) * distance;
        cPrice = 26 + (7/10) * distance;

        minValue = Math.min(tPrice, cPrice);
        System.out.println(minValue);

        refund = minValue * (100 - selfCont)/100;
    }
}
4

5 回答 5

2
tPrice = 75 + (2/10) * distance;
cPrice = 26 + (7/10) * distance;

2 / 10被解释为整数,不能表示逗号后面的值。这意味着2 / 10 = 0.2 = 0

导致tPrice = 75cPrice = 26

用于2.0 / 10表示您正在使用 adouble代替,或2.0f / 10使用浮点数。

您将结果存储在 a 中float,但这只是在对整数的操作完成之后。

于 2013-10-29T12:41:44.767 回答
1

您遇到了整数除法的情况。让我们一块一块地分解:

cPrice = 26 + (7/10) * distance;

运算顺序将首先执行括号 - 因为您将整数除以整数,所以结果 (0.7) 将被截断为 0:

cPrice = 26 + (0) * distance;

然后乘法很简单,因为任何乘以 0 都是 0:

cPrice = 26 + 0;

因此:

cPrice = 26;

为了改进您的代码,请确保当您想要保持除法/乘法的精度时,您需要在计算中使用双精度值:

cPrice = 26 + (0.7) * distance;

请参阅描述该行为的这篇文章:

http://www.cs.umd.edu/~clin/MoreJava/Intro/expr-int-div.html

于 2013-10-29T12:42:34.143 回答
0

7/10和的int 值2/100。这就是这里的问题。

于 2013-10-29T12:46:49.823 回答
0
tPrice = 75 + (2/10) * distance;  // loss of
cPrice = 26 + (7/10) * distance;  // precision due to int

上面两行就是问题所在。由于使用int. 你需要切换到double

相反,试试这个:

tPrice = 75 + (2.0/10.0) * distance;  // loss of
cPrice = 26 + (7.0/10.0) * distance;  // precision due to int

您的变量tPricecPrice需要加倍,以便能够容纳小数点后的数字。

于 2013-10-29T12:42:30.527 回答
0

由于到目前为止没有人提到它,如果您想继续使用 an ,int您可以将表达式重新排列为:(2*distance)/10

这在数学上是等价的,但是整数除法的影响较小(因为它直到最后才会发生。这就像在计算中间与结束时的“舍入”)。这仍然不会给你一个确切的答案,但值得指出的是顺序在这里实际上很重要。在某些情况下,您确实需要一个整数答案,因此最好了解更改操作顺序如何产生影响。

于 2013-10-29T12:52:19.843 回答