0

だから私はまだJavaにかなり慣れていません。私はこれを書きましたが、それを実行すると、金額がクライアントに設定されているものに追加されない理由がわかりません。

例: 開始残高として 500 を入力し、預金を押して 500 を入力し、ケース 3 を押すと、1000 と表示されるはずですが、それでも 500 と表示されます。

何か案は?ありがとう

package bankaccount;
import java.util.Random;
import java.util.Scanner;

public class Client {
 public static void main(String args[]) {
     Scanner input = new Scanner(System.in);       
     System.out.println("Enter your Name: ");
            String cusName = input.nextLine();
            Random randomGenerator = new Random();
            int accNo = randomGenerator.nextInt(100000);
            System.out.println("Enter Initial Balance: ");
            int balance = input.nextInt();
            BankAccount b1 = new BankAccount(cusName, accNo, balance);
            int menu;
            System.out.println("Menu");
            System.out.println("1. Deposit Amount");
            System.out.println("2. Withdraw Amount");
            System.out.println("3. Display Information");
            System.out.println("4. Exit");
            boolean quit = false;
            do {
                    System.out.print("Please enter your choice: ");
                    menu = input.nextInt();
                    switch (menu) {
                    case 1:            
                             System.out.print("Enter depost amount:");
                             Money.amount = input.nextInt(); 
                             b1.getDeposit(); 

                            break;

                    case 2:
                             System.out.println("Current Account Balance=" + b1.getBalance());
                             System.out.print("Enter withdrawal amount:");
                             Money.amount = input.nextInt();
                             b1.getWithdraw();

                            break;

                    case 3:
                            b1.display();
                            break;
                    case 4:
                            quit = true;
                            break;
                    }
            } while (!quit);
    }

public class Money
{

public static int accountNumber, balance=0;
static int amount;

static String name;
public void setDeposit(int amount) {   

            balance = balance + amount;   
    }
public int getDeposit()
{

            balance = balance + amount;
            if (amount < 0) {
                    System.out.println("Invalid");
            }
                                    return 1; 

}
 public void setBalance(int b)
 {
     b = balance;
 }
 public int getBalance()
 {
     return balance;
 }

 public void setWithdraw(int amount)  {


            balance = balance - amount;
    }
 public int getWithdraw()
 {
            balance = balance - amount;
     if (balance < amount) 
     {
                    System.out.println("Not enough funds.");
                    return 1;
            }
           else if (amount < 0) {
                    System.out.println("Invalid");
                    return 1;}
                    else 
                             return 0;
 }

import java.util.*;

public class BankAccount extends Money {
    static String name;
    public static int balance, amount, acctNum;
    Money customerMoney;


    BankAccount(String name, int accNo, int bal) {
            this.name = name;
            this.acctNum = accNo;
            this.balance = bal;
            this.customerMoney = new Money();
    }
            void display() {
            System.out.println("Name:" + name);
            System.out.println("Account No:" + acctNum);
            System.out.println("Balance:" + balance);

    }

    void displayBalance() {
            System.out.println("Balance:" + balance);
    }
    public Money getMoney(){
          return this.customerMoney;
    }
}
4

3 に答える 3

4

最大の問題は声明にありますbalance=0

public static int accountNumber, balance=0;
                                 ^^^^^^^^^

金額を挿入するたびに、残高はゼロになります。

使うべきだったsetDeposit(input.nextInt())

public void setBalance(int b)b = balance;あるべきだったbalance = b;

また、amount変数balanceはas / can beFloatの代わりにする必要があります。intbalanceamount23434.22

于 2012-12-11T16:00:03.257 に答える
1

public static int使用しているすべての変数を削除します。プログラムの実行時にそれらの値が何であるかを追跡するのははるかに難しいため、これらは混乱を引き起こします。ロジックをカプセル化しBankAccountて、プライベート変数とパブリック メソッドを使用してそれらを変更することをお勧めします。

個人的には、Moneyコードからクラスを削除します。混乱を招くだけであり、単純化されたロジックでは必要ありません。アカウントが任意の数の「お金」を保持していると仮定しましょうが、実際にそれを裏付ける実際のお金はありません-(現実のように、それは単に「画面上の数字」ですよね?) -この場合は「Moneyクラスは必要ありません。私たちの のintためだけです。BankAccountbalance

基礎となる機能にあまり多くの変更を加えようとせずに、以下の 2 つのクラスとして書き直しました。

BankAccountクラス:

package banking;

public class BankAccount {

    /**
     * The balance of this account. <br/>
     * Assumes integer money (Floating point math is horrible and who really
     * needs pesky pence or cents right?!)
     */
    private int balance;
    /**
     * The account number
     */
    private final int acctNum;
    /**
     * Name of the account holder
     */
    private final String name;

    /**
     * Construct our basic account with an account number, account holder and
     * starting balance.
     *
     * @param name
     * @param accNo
     * @param bal
     */
    public BankAccount(String name, int accNo, int bal) {
        this.name = name;
        this.acctNum = accNo;
        this.balance = bal;
    }

    /**
     * Make a deposit to this account by adding a fixed sum to the existing
     * balance. <br/>
     *
     * @param amount
     */
    public void deposit(int amount) {
        if (amount <= 0) {
            throw new IllegalArgumentException("You cannot deposit zero or less");
        } else {
            this.balance += amount;
        }
    }

    /**
     * Make a withdrawal from this account by subtracting a fixed amount from
     * the existing balance. <br/>
     *
     * @param amount
     */
    public void withdraw(int amount) {
        if (amount > balance) {
            throw new IllegalArgumentException("Insufficient Funds");
        } else if (amount <= 0) {
            throw new IllegalArgumentException("You cannot withdraw zero or less");
        } else {
            balance -= amount;
        }
    }

    /**
     * Get the account holder name.
     *
     * @return
     */
    public String getName() {
        return name;
    }

    /**
     * Get the current account balance.
     *
     * @return
     */
    public int getBalance() {
        return balance;
    }

    /**
     * Get the account identifier for this account.
     *
     * @return
     */
    public int getAcctNum() {
        return acctNum;
    }

    /**
     * Debug print method.
     */
    public void display() {
        System.out.println("Name:" + name);
        System.out.println("Account No:" + acctNum);
        System.out.println("Balance:" + balance);
    }
}

そしてメインクラス:

package banking;

import java.util.Random;
import java.util.Scanner;

public class BankMain {

    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);

        System.out.println("Enter your Name: ");
        String customerName = input.nextLine();

        Random randomGenerator = new Random();
        int acctNo = randomGenerator.nextInt(100000);

        System.out.println("Enter Initial Balance: ");
        int balance = input.nextInt();

        BankAccount acct = new BankAccount(customerName, acctNo, balance);

        System.out.println("Menu");
        System.out.println("1. Deposit Amount");
        System.out.println("2. Withdraw Amount");
        System.out.println("3. Display Information");
        System.out.println("4. Exit");

        boolean quit = false;
        int menu;
        do {
            final int transaction;
            System.out.print("Please enter your choice: ");
            menu = input.nextInt();
            switch (menu) {
                case 1:
                    System.out.print("Enter depost amount:");
                    transaction = input.nextInt();
                    acct.deposit(transaction);
                    break;

                case 2:
                    System.out.println("Current Account Balance=" + acct.getBalance());
                    System.out.print("Enter withdrawal amount:");
                    transaction = input.nextInt();
                    try {
                        acct.withdraw(transaction);
                    } catch (IllegalArgumentException iaEx) {
                        System.out.println(iaEx.getMessage());
                    }
                    break;

                case 3:
                    acct.display();
                    break;

                case 4:
                    quit = true;
                    break;
            }
        } while (!quit);
    }
}

Moneyこれはまだ完全にはほど遠いですが、静的変数とクラスを削除した方が理解しやすいと思います。

于 2012-12-11T16:34:09.693 に答える
0

コードには多くの問題があります。たとえば、どのフィールドも静的であってはなりませんが、主な問題は複数の重複フィールドがあることです。

例: あなたが持っているインマネー

public static int accountNumber, balance=0;
static int amount;

static String name;

そしてBankAccountにはあなたが持っています

static String name;
public static int balance, amount, acctNum;
Money customerMoney;

nameこれは、 、 、balanceと呼ばれる複数のフィールドがあることを意味しますamount。フィールドの最初のグループを使用するコードもあれば、2 番目のグループを使用するコードもあります。customerMoney直接更新されないもあります。

混乱を避けるために、各フィールドを非静的にし、1 か所だけにすることをお勧めします。customerMoney使いたくなるかもしれないので削除してください ;)

于 2012-12-11T16:29:15.623 に答える