2012-09-26 5 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.setBalance()CheckingAccount.setServiceCharge()입니다 내 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; 
    } 
} 

입니다. 내가 뭘하려는 건 내 기본 클래스 (processCheckprocessDeposit)에서 만든 함수에서 만든 클래스 (setBalancesetServiceCharge)를 내 클래스에서 호출하는 것입니다.

하지만 실행할 수 없으며 계속 이러한 오류 메시지가 표시됩니다.

비 정적 메소드 setBalance (이중, INT, 더블, 불리언)이 정적 콘텍스트 CheckingAccount.setBalance로부터 참조 할 수없는 (전차, TCODE, curCharge, monthCh); 가능한 솔루션의

답변

1

당신은 당신의 setBalance를 호출 .... 잘못된 클래스 이름을 통해 .... setBalance() 메서드는 정적이 아니므로 클래스가 아닌 클래스의 특정 인스턴스에 정의됩니다.

당신은 메서드를 호출 할 CheckingAccount의 인스턴스를 만들 필요가

0 ..

둘째, 당신의 constructorCheckingAccount 클래스에서, 당신은 totalService에 대한 모든 인수를 전달하지 않은

,하지만 당신은 알 수없는 변수를 설정하는 .. 당신은 .. 당신이 .. 주에서 인수로 전달하고 아래에 생성자를 변경할 수 는 어느 쪽이든 당신은 고정 된 값으로 totalServiceCharge를 초기화해야 .. 거기 컴파일러 오류가 발생하거나 것

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

그런 다음 main에서 다음과 같이 호출하십시오. -

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); 
} 
관련 문제