1

Java で、4 回目の出金以降、出金ごとに月額サービス料が $1 ずつ増加するプログラム (銀行口座プログラム) を作成しようとしています。ループを使用しようとしましたが、スタックしました。

コード:

    public void monthlyProcess() {
    int w = getWithdrawals();
    if (w > 4) {
        while(w > 4) {
            serCharge++;
        }
    }
    super.monthlyProcess();
    if(bal <= MIN_BAL) {
        status = false;
    }
}

ありがとうございました!

4

4 に答える 4

4

ここで、これはうまくいくはずです。

乾杯!

public void monthlyProcess() {
    int w = getWithdrawals();
    if (w > 4) {
        serCharge += w - 4;
    }
    super.monthlyProcess();
    if(bal <= MIN_BAL) {
        status = false;
    }
}
于 2012-10-30T20:09:14.197 に答える
3

なぜだけではないのsurcharge += w-4ですか?

編集:

surcharge += Math.max(w-4,0)

于 2012-10-30T20:00:06.953 に答える
3

私には無限ループのように見えますが、全体として、ループが完全に必要だとは思いません:

 public void monthlyProcess() {
    int w = getWithdrawals();
    if (w > 4) {
           while(w > 4) {
            serCharge++;
            w--;
         }

    }
    super.monthlyProcess();
    if(bal <= MIN_BAL) {
        status = false;
    }
}

やるべき

w 変数に対して何もしていないため、常に 4 よりも大きくなるため、無限ループが発生し、ループが中断されることはありません。もしそうなら、無限ループのために増加し続けるため、とにかく膨大なサービス料金が発生することになります

「あるプログラマーが牛乳を買いに出かけると、彼の妻が彼に電話をかけて、『その間に卵を買ってきてくれないか』と言いました...彼は二度と戻りません」

于 2012-10-30T20:00:33.423 に答える
1

これまでの他の回答は、ループを完全に取り除くことを正しく示していwhileますが、完全を期すために、そのループを維持するソリューションを次に示します。

public void monthlyProcess() {
    int w = getWithdrawals();
    if (w > 4) {
        while(w > 4) {
            serCharge++;
            // make sure you update the value of w, 
            // otherwise you'll be stuck in an infinite loop!
            w--; 
        }
    }
    super.monthlyProcess();
    if(bal <= MIN_BAL) {
        status = false;
    }
}
于 2012-10-30T20:04:28.630 に答える