2012-09-26 100 views
1

我正在編寫一個程序,用於跟蹤隨着時間的推移完成的不同事務 。我有一個主班,另一個班級名爲 CheckingAccount.java從主類上的函數調用外部類對象

我有一個這樣格式化的主類。

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); 
    } 
} 

這是我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; 
    } 
} 

所以我不能去工作線CheckingAccount.setBalance()CheckingAccount.setServiceCharge()的功能裏面我的主類。我想要做的是從我創建的函數(processCheckprocessDeposit)中調用我創建的方法(setBalancesetServiceCharge)。

但我不能讓它運行,我一直運行這些錯誤消息。

非靜態方法的setBalance(雙,INT,雙,布爾值)不能從靜態上下文 CheckingAccount.setBalance引用(電車,TCODE,curCharge,monthCh);

回答

1

要調用你的setBalance通過類名稱是錯誤的.... setBalance()方法是非靜態的,所以它被定義爲類的具體實例,而不是一類。

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

您需要創建的CheckingAccount一個實例調用的方法..

其次,在你constructorCheckingAccount類,你沒有通過任何參數爲totalService,但要設置一個具有未知變量.. 你會得到一個編譯器錯誤有.. 要麼你需要用一個固定值來初始化你totalServiceCharge或者,你可以把它作爲主要的參數。而如下改變你的構造..

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

然後從主,這樣稱呼它: -

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

+1在totalService'好的地方,錯過了:P – MadProgrammer

+0

謝謝,我感謝你的幫助。這工作完美。 –

0

其中一個可能的解決方案是:

你需要調用方法之前CheckingAccount創建對象。

實施例:

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);** 
    } 

另一種方式是,改變的setBalance方法靜態方法。

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; 
    } 

我認爲第一種方法比第二種方法更有意義。

0

CheckingAccount.setBalanceCheckingAccount.setServiceCharge不是靜態方法(在這種情況下,它們不應該是)。

您需要通過帳戶的方法的參考...

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); 
} 

的你就可以做這樣的事情......

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