Метод toString не распечатывает мой объект, вместо этого он печатает адрес памяти

BankAccount b0, b1, b2, b3;
    b1=new BankAccount();
    b2=new BankAccount();
    b3=new BankAccount();
    for (int i=0; i<3; i++)
    {
        if (i==0)
            b0=b1;
        else if (i==1)
            b0=b2;
        else
            b0=b3;

и (то, что вы только что видели, было частью демонстрации, ниже часть материала класса)

public String toString(double deposit, double withdraw, double fee, double total) {
    String str=name+"'s bank account statement:" + "\nInitial balance: " + balance + 
        "\nDeposit amount: " + deposit + "\nWithdraw amount: " + withdraw + "\nNumber of transactions: "
        + transac + "\nTotal bank fees: " + fee + "Final monthly balance: " + total; 
        return str;

и (демонстрация, я не включил весь код, просто потому, что это все еще открытое задание.

System.out.println(b0); 

Я действительно понятия не имею, почему он не печатает строковые вещи :( весь класс (позже удалю)

public class BankAccount {
private String name;
private double balance;
private int transac;

public BankAccount() {
    balance=0;
}
public void setName(String accountName) {
    name=accountName;
}
public void setBalance(double accountBalance) {
    balance=accountBalance;
}
public void setTransac(int accountTransac) {
    transac=accountTransac;
}
public String getName() {
    return name;
}
public double getBalance() {
    return balance;
}
public int getTransac() {
    return transac;
}
public double getDeposit(double deposit) {
    return balance+deposit;
}
public double getWithdraw(double deposit, double withdraw) {
    return balance+deposit-withdraw;
}
public double getFee(double fee, int accountTransac, double deposit, double withdraw) {
    fee=10;
    if (transac<20)
        fee+=transac*0.5;
    else if (20<=transac && accountTransac<40)
        fee+=transac*0.25;
    else if (40<=transac && transac<60)
        fee+=transac*0.2;
    else
        fee+=transac*0.1;
    if (balance+deposit-withdraw<400)
        fee+=15;
    return fee;
}
public double finalBalance(double fee, int accountTransac, double deposit, double withdraw) {
    double total=balance+deposit-withdraw-fee;
    return total;
}
public String toString(double deposit, double withdraw, double fee, double total) {
    toString(this.deposit, this.withdraw, this.fee, this.total);
    String str=name+"'s bank account statement:" + "\nInitial balance: " + balance + 
        "\nDeposit amount: " + deposit + "\nWithdraw amount: " + withdraw + "\nNumber of transactions: "
        + transac + "\nTotal bank fees: " + fee + "Final monthly balance: " + total; 
        return str;

}

}


person Froblinkin    schedule 23.06.2013    source источник
comment
toString не должен принимать никаких аргументов   -  person Anton    schedule 24.06.2013


Ответы (3)


вы должны переопределить метод public String toString() (без аргументов):

если у вас уже есть метод public String toString(double deposit, double withdraw, double fee, double total), используйте это:

class BankAccount {

 public String toString() {
  toString(this.deposit, this.withdraw, this.fee, this.total);
}
/* .. */
person zacheusz    schedule 23.06.2013
comment
поэтому проблема, с которой я столкнулся в своем разделе класса, заключалась в том, что, когда я использовал комиссию, общую сумму, вывод и депозит без аргументов, он не мог найти символ, и я действительно не понимаю функцию this.deposit: O - person Froblinkin; 24.06.2013
comment
@user2514022 user2514022 не могли бы вы опубликовать весь исходный код класса? - person zacheusz; 24.06.2013

Вы перегрузили метод toString(), предоставив одноуровневому методу другой набор аргументов.

Вы хотите переопределить метод toString() без аргументов.

Например, если все аргументы вашего другого метода toString() были полями-членами:

public String toString() {
    String str=name+"'s bank account statement:" + "\nInitial balance: " + balance + 
        "\nDeposit amount: " + deposit + "\nWithdraw amount: " + withdraw + "\nNumber of transactions: "
        + transac + "\nTotal bank fees: " + fee + "Final monthly balance: " + total; 
    return str;
}
person Andy Thomas    schedule 23.06.2013
comment
проблема в том, что депозит/снятие/плата/общая сумма не определены как частные поля в классе, поэтому java не может их найти для меня - person Froblinkin; 24.06.2013
comment
Возможно, вы пытаетесь представить более одного объекта в одном классе. У него есть начальный баланс и конечный баланс; это могут быть члены класса. Но учетная запись не имеет ровно одного депозита или снятия — на нее повлиял набор из них. - person Andy Thomas; 24.06.2013

Важной частью информации, которая отсутствует в других ответах, является то, что когда вы вызываете System.out.println(b0), компилятор Java автоматически вставляет вызов .toString() - это часть определения языка объяснено здесь.

Следовательно, как сказано в другом месте, для вывода объекта вам необходимо переопределить этот метод.

person selig    schedule 23.06.2013