Методът 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 бихте ли публикували целия източник на клас? - 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