Given the following class:



public class CheckingAccount {

    public int amount;

    public CheckingAccount(int amount) {
        this.amount = amount;
    }

    public int getAmount() {
        return amount;
    }

    public void changeAmount(int x) {
        amount += x;
    }
}

And given the following main method, located in another class:

public static void main(String[] args){
    CheckingAccount acct = new CheckingAccount((int)(Math.random() * 1000));
    //line n1
    System.out.println(acct.getAmount());
}

Which three lines, when inserted independently at line n1, cause the program to print a 0 balance?

A.

this.amount = 0;
B.
amount = 0;
C.
acct(0);
D.
acct.amount = 0;
E.
acct.getAmount() = 0;
F.
acct.changeAmount(0);
G.
acct.changeAmount(-acct.amount);
H.
acct.changeAmount(-acct.getAmount());

題解

選項A,由於main方法是在不同的類別,因此使用「this」並不能存取到acct物件,會造成編譯錯誤。

選項B,amount因為沒有宣告,所以會造成編譯錯誤。

選項C,acct是物件變數,不是方法,無法這樣使用。

選項D,直接存取acct變數參考到的物件之欄位,是可行的作法。

選項E,方法不能這樣使用,會造成編譯錯誤。

選項F,因為無法保證amount一開始是0,所以將它加0並不一定可以輸出0。

選項G,amount = amount - amount,所以結果會是0。

選項H,理由同選項G。