在java中返回函数时应用转换?

时间:2012-11-28 18:54:56

标签: java type-conversion return-type

我刚写了这个简单的方法,必须返回一个double值。这是从银行账户中提取资金的功能。只有当用户输入的金额小于他在账户中的金额时,该功能才能让用户获得金钱。 有一种情况,如果他是特殊用户,即使他尝试了一个值=余额+ 1000,他也可以拿钱。

由于我是java的初学者,我还不熟悉这种类型的东西(我是一个php程序员,所以我从来没有真的担心这个,但是我遇到了麻烦代码工作,因为我返回一个double,如果没关系,但是假,如果不是,我不能在java中这样做..这是我的方法..(变量'balance'和'special'属于我的班级。)

public double getMoney (double value) {
    if (value <= balance) {
        balance = balance - value;
    } else {
        if (special == true && value < (balance+1000)) {
            return balance-value;
        } else {
            return false;
        }
    }
}

我知道这是一个noob问题,但我刚开始研究java而且我习惯使用PHP编写代码,我不需要担心变量的类型,所以我想知道你是否可以给我一些建议。 感谢

3 个答案:

答案 0 :(得分:3)

请注意,对于货币值,使用double通常是一个坏主意。你当然不希望精确度发生损失,对吗?

尝试查看十进制类型,例如BigDecimal,或考虑使用存储在足够大的整数类型中的美分(如果您不需要支持一小部分值)。

不要返回false。返回0(&#34;没有提取资金&#34;),或使用例外进行错误处理。即使在松散类型的语言(如PHP或JavaScript)中,这通常也是一个坏主意,因为它会导致意外行为。尝试尽可能严格

另一位用户建议使用Double.NEGATIVE_INFINITY。您也可以使用Double.NaN,但我强烈反对这一点。它会以一种非常微妙的方式出错,而这不是你想要的。你可能想要一个很大的例外。你希望getMoney函数的用户处理这种情况,因此我建议使用一个异常,实际必须处理{{1} }。

答案 1 :(得分:3)

您可以返回Double.NEGATIVE_INFINITY,而不是false。 然后调用者明确地检查该值,并使用Draw()检测ist为无效。

来电者通过

检查
double val = getMoney(5000000);
if (val == Double.NEGATIVE_INFINITY) {
   // money could not be withdran
   // print message
} else {
   // ok money could be withdrawn
}

如果你想做更专业的话,你必须重新调用transactionInfo:

TransActionInfo info = getMoney(500000);
if (info.getStatus == Status.LIMIT_EXCEEDED) {
   // could not withraw

} else {
   ...
}

而不是if你可以使用switch语句:

TransActionInfo info = getMoney(500000);
switch (info.getStatus()) {
  case: Status.OK: 
     break;
  case Status.LIMIT_EXCEEDED:
    // inform on display of bankomat. or similar
     break;
  ...
}

答案 2 :(得分:2)

我认为你应该将所有变量作为方法参数传递。因此,在方法范围内,您可以解决问题并返回true或false ...或者不返回任何内容(void)。

public boolean hasMoney(double need, double balance, boolean special) {
    if( special ) {
        return balance+1000 >= need;
    } else {
        return balance >= need;
    }
}

如果回报属实,您知道客户已经赚钱了