我刚写了这个简单的方法,必须返回一个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编写代码,我不需要担心变量的类型,所以我想知道你是否可以给我一些建议。 感谢
答案 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;
}
}
如果回报属实,您知道客户已经赚钱了