2

double値を返さなければならないこの単純なメソッドを作成しました。銀行口座からお金を引き出す機能です。この関数は、ユーザーが自分のアカウントにある金額よりも小さい値を入力した場合にのみ、ユーザーにお金を受け取らせる必要があります。特別な利用者であれば、値=残高+ 1000を試みてもお金を受け取ることができるという条件があります。

私はJavaの初心者なので、このタイプのことにはまだ慣れていません(私は、phpプログラマーなので、これについて心配する必要はありませんでしたが、このコードを機能させるのに問題があります。なぜなら、問題がなければdoubleを返すのですが、そうでない場合はfalseを返し、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;
        }
    }
}

初心者の質問だとは思いますが、Javaの勉強を始めたばかりで、変数の種類を気にする必要がないPHPを使用したコーディングに慣れていたので、アドバイスをいただけないでしょうか。ありがとう

4

3 に答える 3

3

お金の価値については、通常、doubleを使用することは悪い考えであることに注意してください。あなたは確かに精度の低下が起こりたくないですよね?

BigDecimalなどの10進型を調べるか、十分な大きさの整数型に格納されているセントの使用を検討してください(セント値の小数部をサポートする必要がない場合)。

戻らないでくださいfalse。いずれかを返す0(「お金を引き出しない」)か、エラー処理に例外を使用します。PHPやJavaScriptなどの緩く型付けされた言語でも、予期しない動作を引き起こすため、これは通常は悪い考えです。可能な限り厳しくしてください!

別のユーザーがを使用することを提案しましたDouble.NEGATIVE_INFINITY。使用した方がよいかもしれませんが、Double.NaNこれには強くお勧めします。それは物事を非常に微妙にうまくいかないでしょう、そしてそれはあなたが望むものではありません。あなたはおそらく大きな脂肪の例外が欲しいでしょう。関数のユーザーにこのケースを処理さたいgetMoneyので、実際には誰でも呼び出す必要getMoneyのある例外を使用することをお勧めします。

于 2012-11-28T19:16:19.243 に答える
3

falseの代わりにDouble.NEGATIVE_INFINITYを返すことができます。次に、呼び出し元はその値を明示的にチェックし、istを無効なwithDrawn()として検出します。

発信者はそれをチェックします

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;
  ...
}
于 2012-11-28T19:17:03.310 に答える
2

すべての変数をメソッドパラメータとして渡す必要があると思います。したがって、メソッドスコープでは、質問を解決してtrueまたはfalseを返すか、何も返さない(void)。

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

返品が本当だった場合、あなたは顧客が十分なお金を持っていることを知っています

于 2012-11-28T19:18:04.743 に答える