5

次の構文に問題があります。

私は現在 Java を学んでおり、Java の知識を深めるために過去の試験問題に取り組んでいます。

質問は次のとおりです。

口座番号と口座の現在の残高のインスタンス変数を持つクラス Account を作成します。コンストラクターとメソッド getAccountNumber()、getBalance()、debit(double amount)、および credit(double amount) を実装します。debit と credit の実装で、指定された金額が正であること、および debit メソッドで当座貸越が発生しないことを確認してください。これらの場合は false を返します。それ以外の場合は、残高を更新します。

私はこれをやろうとしましたが、借方と貸方のメソッドのブール関数を実装していません。最初にプログラムをビルドして、それを機能させようとしただけです。上記のメソッドから金額を返そうとしながら、true または false を返す方法がわからなかったので、後でこれを見るつもりでした。

私はまだ Java を学んでいるので、私のコードに誤りがあればご容赦ください。

コードを実行することはできますが、預金を入力すると正しく機能しないようです。

これが私のコードです:

import java.util.*;

public class Account {

private int accountNumber;
private static double currentBalance;
private static double debit;

// ***** CONSTRUCTOR *****//
public Account(double currentBalance, int accountNumber) {
    accountNumber = 12345;
    currentBalance = 10000.00;
}

public int getAccountNumber(int accountNumber) {
    this.accountNumber = accountNumber;
    return accountNumber;
}

public double getcurrentBalance(double currentBalance) {
    this.currentBalance = currentBalance;
    return currentBalance;
}

public static double debit(double currentBalance, double amount) {
    currentBalance -= amount;
    return currentBalance;
}

public static double credit(double currentBalance, double amount) {
    currentBalance += amount;
    return currentBalance;
}

public static void main(String [] args){
    String withdraw = "Withdraw";
    String deposit = "Deposit";
    double amount;
    Scanner in = new Scanner(System.in);
    System.out.println("Are you withdrawing or depositing? ");
    String userInput = in.nextLine();
    if(userInput == withdraw)
        System.out.println("Enter amount to withdraw: ");
        amount = in.nextDouble();
            if(amount > currentBalance)
                System.out.println("You have exceeded your amount.");

                debit(currentBalance, amount);

            System.out.println("Your new balance is: " + currentBalance);

            if (userInput == deposit)
                System.out.println("Enter amount to deposit: ");
                    amount = in.nextDouble();
                    credit(currentBalance, amount);

        System.out.println("Your new balance is: " + currentBalance);

}
}

繰り返しますが、私のコードのエラーを許してください。私はまだその構文を学んでいます。

4

7 に答える 7

6

if ステートメントif(userInput == withdraw)では、オブジェクトを比較しようとしていStringます。

Java では、Stringオブジェクトを比較するequalsために比較演算子の代わりにメソッドが使用されます。==

if(userInput.equals(withdraw))

change these to use を使用Stringしてオブジェクトを比較するコードには、いくつかのインスタンスがあります。==equals

また、条件付きブロックを使用する場合は、ブロックを中かっこで囲むのが最善です{}

if(true){

}
于 2013-05-13T10:22:06.443 に答える
3

括弧を使用しないため、if ステートメントの後の最初の行のみが実行されます。また、文字列は を使用して比較する必要があります.equals(otherString)。このような:

if(userInput.equals(withdraw))
    System.out.println("Enter amount to withdraw: "); //Only executed if userInput == withdraw
    amount = in.nextDouble(); //Always executed

if(userInput.equals(withdraw)) {
    System.out.println("Enter amount to withdraw: "); 
    amount = in.nextDouble(); 
    //All executed
}

これを行う:

if(userInput.equals(withdraw)) {
    System.out.println("Enter amount to withdraw: ");
    amount = in.nextDouble();
    if(amount > currentBalance)
            System.out.println("You have exceeded your amount.");

    debit(currentBalance, amount);
    System.out.println("Your new balance is: " + currentBalance);
}

if (userInput.equals(deposit)) {
     System.out.println("Enter amount to deposit: ");
     amount = in.nextDouble();
     credit(currentBalance, amount);
     System.out.println("Your new balance is: " + currentBalance);
}

出金する金額が現在の残高を超える場合、「警告メッセージ」が表示されますが、出金は続行されます。したがって、あなたはマイナスの金額になってしまいます。これを行いたくない場合は、それに応じて変更する必要があります。しかし、このように、括弧を使用する (または使用しない) と、さまざまな効果があることがわかります。

于 2013-05-13T10:20:45.453 に答える
2

これらの方法について:

public static double debit(double currentBalance, double amount) {
    currentBalance -= amount;
    return currentBalance;
}

public static double credit(double currentBalance, double amount) {
    currentBalance += amount;
    return currentBalance;
}

関数への入力には、実際には現在の残高を含める必要はありません。オブジェクトは、現在の残高が何であるかを既に認識しています (指摘されているように、静的であってはならないオブジェクトの currentBalance フィールドに保持されています)。

次のように動作する実際のキャッシュ マシンを想像してみてください。

Whats my current balance:
£100
CreditAccount("I promise my current balance is £1 Million, it really is", £10):
Balance:£1,000,010

編集:このように動作するコードを含めます

import java.util.*;

public class Account {

private int accountNumber;
private double currentBalance; //balance kept track of internally

// ***** CONSTRUCTOR *****//

    public Account(int accountNumber, double currentBalance) {
        this.accountNumber = accountNumber;
        this.currentBalance = currentBalance;
    }


    public int getAccountNumber() {
        return accountNumber;
    }

    public double getcurrentBalance() {
        return currentBalance;
    }

    public boolean debit(double amount) {
        //we just refer to the objects fields and they are changed

        if (currentBalance<amount){
            return false; //transaction rejected
        }else{
            currentBalance -= amount;
            return true;
            //transaction approaved and occured
        }

        //Note how I directly change currentBalance, there is no need to have it as either an input or an output

    }

    public void credit( double amount) {
        //credits will always go through, no need for return boolean
        currentBalance += amount;

        //Note how I directly change currentBalance, there is no need to have it as either an input or an output
    }

    public static void main(String [] args){
        Account acc=new Account(1234,1000);

        acc.credit(100);

        System.out.println("Current ballance is " + acc.getcurrentBalance());

        boolean success=acc.debit(900); //there is enough funds, will succeed

        System.out.println("Current ballance is " + acc.getcurrentBalance());
        System.out.println("Transaction succeeded: " +  success);


        success=acc.debit(900); //will fail as not enough funds

        System.out.println("Current ballance is " + acc.getcurrentBalance());
        System.out.println("Transaction succeeded: " +  success);


    }
}

あなたはそのこつを持っているように見えるので、私はタイプされた入力を使用することを気にしませんでした

于 2013-05-13T10:42:23.747 に答える
2
if (userInput == deposit)

する必要があります

if (userInput.equals(deposit))

引き出しも同様。

于 2013-05-13T10:23:37.203 に答える
1

「{」と「}」がない場合、if ステートメントの後の最初の行は、そのステートメントの一部としてのみ実行されます。また、if (userInput == deposit)ブロックが正しくインデントされていませんif (userInput == withdraw)。また、文字列比較は次を使用して行う必要がありますuserInput.equals(withdraw)

于 2013-05-13T10:22:48.647 に答える
1

== の代わりに equals() メソッドを使用して、値ではなく Objetcs の等価性を比較します。

import java.util.*;

public class Account{

private int accountNumber;
private static double currentBalance;
private static double debit;

// ***** CONSTRUCTOR *****//
public Account(double currentBalance, int accountNumber) {
    accountNumber = 12345;
    currentBalance = 10000.00;
}

public int getAccountNumber(int accountNumber) {
    this.accountNumber = accountNumber;
    return accountNumber;
}

public double getcurrentBalance(double currentBalance) {
    this.currentBalance = currentBalance;
    return currentBalance;
}

public static double debit(double currentBalance, double amount) {
    currentBalance -= amount;
    return currentBalance;
}

public static double credit(double currentBalance, double amount) {
    currentBalance += amount;
    return currentBalance;
}

public static void main(String [] args){
    String withdraw = "Withdraw";
    String deposit = "Deposit";
    double amount;
    Scanner in = new Scanner(System.in);
    System.out.println("Are you withdrawing or depositing? ");
    String userInput = in.nextLine();
    if(userInput.equals(withdraw))
        System.out.println("Enter amount to withdraw: ");
        amount = in.nextDouble();
            if(amount > currentBalance)
                System.out.println("You have exceeded your amount.");

                debit(currentBalance, amount);

            System.out.println("Your new balance is: " + currentBalance);

            if (userInput .equals(deposit))
                System.out.println("Enter amount to deposit: ");
                    amount = in.nextDouble();
                    credit(currentBalance, amount);

        System.out.println("Your new balance is: " + currentBalance);

}
}
于 2013-05-13T10:25:17.570 に答える