0

私は愚かだ。

import java.util.Scanner;
public class ATM {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double withdraw = scanner.nextDouble();
double balance = scanner.nextDouble();
int withdraw = 0; int balance;
if (withdraw % 5 == 0 && withdraw<(balance-.5)) {
    balance = balance - (withdraw + .5); 
    System.out.println(balance);
}
 else {
     System.out.println(balance);
 }}}

$.50 の請求が発生している間、残高から引き出し額が差し引かれるようにしようとしています。残念ながら、引き出しを差し引くことなく、$.50 を差し引くだけです。前もって感謝します。

固定コード

import java.util.Scanner;
public class ATM {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double withdraw = scanner.nextDouble();
double balance = scanner.nextDouble();
if (withdraw % 5 == 0 && withdraw<(balance-.5)) {
    balance -= (withdraw + .5); 
    System.out.println(balance);
}
 else {
     System.out.println(balance);
 }}}
4

3 に答える 3

2

ここにアルゴリズムがありますhttps://stackoverflow.com/a/14387552/1083704

同じ問題があります-不明な型の使用を含む複雑な式のバグです。また、プログラムをデバッグする場合も同じことを行う必要があります。中間変数を使用して、ワンライナーを複数の単純な式に単純化します。次に、コードを段階的にデバッグし、それらの中間値を観察できます。プログラマーであることはハッカーであることを意味し、デバッグを学ばなければハッカーにはなれません。

于 2013-01-18T23:56:43.050 に答える
0

引き出し変数をどこに設定していますか?0 より大きい値が割り当てられていない変数に .5 を追加しているようです。より複雑なコードでテストするための本当に簡単な方法は、コードで撤回を設定して言うことです。残高方程式で使用する直前に値 5 を指定すると、問題が方程式にあるのか、それとも引き出し変数にあるのかがわかりますが、方程式はしっかりしているように見えます。また、できること

balance -= (withdraw + .5)
于 2013-01-18T23:49:07.510 に答える
0

与えられた情報が非常に少ない場合、コードをデバッグするのはかなり困難です。しかし、私の最善の推測は、初期化のバグです.withdrawが正しく初期化されておらず、デフォルト値0であると想定しているものです。

しかし、確かに、print ステートメントの前に、withdraw が何に相当するかを知る必要があります。次のように、残高を合計する前に印刷ステートメントを追加していただけますか。

System.out.println(withdraw);
balance -= (withdraw + .5);
System.out.println(balance);

そして、実行時にwithdrawが> 0かどうかを確認しますか? そうでない場合は。残高を計算する前に、引き出し値に設定されていることを確認してください。

さらに良いのは、完全なコード スニペットを投稿して、自分自身を確認できるようにすることです。

注意 a -= b は a = a - b の省略形です

于 2013-01-18T23:53:03.840 に答える