2012-09-26 5 views
1

Je suis en train d'écrire un programme qui garde la trace de différentes transactions fait au fil du temps. J'ai une classe principale, et aussi une autre classe nommée CheckingAccount.java.Appel d'un objet de classe externe à partir de la fonction sur la classe principale

J'ai une classe principale formatée de cette façon.

public class Main 
{ 
    public static void main (String[] args) 
    { 
     CheckingAccount c = new CheckingAccount(bal); 
     --line of code--- 
     --line of code--- 
     --line of code---   
    } 

    public static int getTransCode() 
    { 
     --line of code--- 
    } 
    public static double getTransAmt() 
    { 
     --line of code--- 
    } 
    public static void processCheck(double trAm, int tCode, boolean monthCh) 
    { 
     double curCharge=0.15; 

     CheckingAccount.setBalance(trAm,tCode,curCharge,monthCh); 
     CheckingAccount.setServiceCharge(curCharge); 
    } 
    public static void processDeposit(double trAm, int tCode, boolean monthCh) 
    { 
     double curCharge=0.10; 

     CheckingAccount.setBalance(trAm,tCode,curCharge,monthCh); 
     CheckingAccount.setServiceCharge(curCharge); 
    } 
} 

Ceci est mon CheckingAccount.java

public class CheckingAccount 
{ 
    private double balance; 
    private double totalServiceCharge; 

    public CheckingAccount(double initialBalance) 
    { 
     balance = initialBalance; 
     totalServiceCharge = totalServiceCharge; 
    } 

    public double getBalance() 
    { 
     return balance; 
    } 

    public void setBalance(double tAm, int Code, double charge, boolean mChrg) 
    { 
     if(tCode == 1) 
     balance = (balance - tAm) - charge; 
     else //if(tCode == 2) 
      balance = (balance + tAm) - charge; 
    } 

    public double getServiceCharge() 
    { 
     return totalServiceCharge; 
    } 

    public void setServiceCharge(double currentServiceCharge) 
    { 
     totalServiceCharge = totalServiceCharge+currentServiceCharge; 
    } 
} 

Ainsi, les lignes que je ne peux pas se rendre au travail sont CheckingAccount.setBalance() et CheckingAccount.setServiceCharge() dans les fonctions de ma classe principale. Ce que j'essaie de faire est d'appeler les méthodes que j'ai créées (setBalance et setServiceCharge) dans ma classe, à partir des fonctions que j'ai créées sur ma classe principale (processCheck et processDeposit).

Mais je n'arrive pas à l'exécuter, je continue à courir avec ces messages d'erreur.

méthode non statique setBalance (double, int, double, boolean) ne peut être référencé à partir d'un contexte statique CheckingAccount.setBalance (TRAM, tcode, curCharge, monthCh);

Répondre

1

Vous appelez votre setBalance par le nom de classe qui est faux .... setBalance() La méthode est non-statique, elle est donc définie à l'instance spécifique de la classe, pas pour une classe ..

**CheckingAccount.setBalance(trAm,tCode,curCharge,monthCh); 
CheckingAccount.setServiceCharge(curCharge);** 

Vous devez créer une instance de CheckingAccount pour appeler la méthode ..

En second lieu, dans votre constructor de CheckingAccount classe, vous n'avez pas passé aucun argument pour totalService, mais vous définissez une avec une variable inconnue .. Vous obtiendrez une erreur de compilation .. il Soit vous avez besoin d'initialiser votre totalServiceCharge avec une valeur fixe ou, vous pouvez passer comme un argument principal .. Et changer votre constructeur comme ci-dessous ..

public CheckingAccount(double initialBalance, ** double totalServiceCharge) 
{ 
    balance = initialBalance; 
    this.totalServiceCharge = totalServiceCharge; 
} 

puis, de principal, appelez comme ceci: -

CheckingAccount ca = new CheckingAccount(bal, totalServiceCharge); 
+0

+1 Nice spot sur la 'totalService', manqués: P – MadProgrammer

+0

Merci, je vous remercie de votre aide. Cela a fonctionné parfaitement. –

0

Une des solutions possibles est:

Vous devez créer un objet pour CheckingAccount avant d'appeler la méthode.

Exemple:

public static void processDeposit(double trAm, int tCode, boolean monthCh) 
    { 
     double curCharge=0.10; 
     CheckingAccount ca = new CheckingAccount();  
     ca.setBalance(trAm,tCode,curCharge,monthCh); 
     ca.setServiceCharge(curCharge);** 
    } 

Une autre façon est, selon le changement setBalance Procédé statique.

public static void setBalance(double tAm, int Code, double charge, boolean mChrg) 
    { 
     if(tCode == 1) 
     balance = (balance - tAm) - charge; 
     else //if(tCode == 2) 
      balance = (balance + tAm) - charge; 
    } 

Je pense que la première approche a plus de sens que la deuxième approche.

0

CheckingAccount.setBalance et CheckingAccount.setServiceCharge ne sont pas des méthodes statiques (et dans ce contexte, ils ne devraient pas être).

Vous devez passer une référence du compte à vos méthodes ...

public static void processCheck(CheckingAccount ca, double trAm, int tCode, boolean monthCh) 
{ 
    double curCharge=0.15; 

    ca.setBalance(trAm,tCode,curCharge,monthCh); 
    ca.setServiceCharge(curCharge);** 
} 

public static void processDeposit(CheckingAccount ca, double trAm, int tCode, boolean monthCh) 
{ 
    double curCharge=0.10; 

    ca.setBalance(trAm,tCode,curCharge,monthCh); 
    ca.setServiceCharge(curCharge); 
} 

Le vous seriez en mesure de faire quelque chose comme ...

public static void main (String[] args) 
{ 
    CheckingAccount c = new CheckingAccount(bal); 
    processCheck(ca, 100.0, 1, false); 
} 
Questions connexes