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()私がやろうとしているのは、メインクラス(、、および)で作成した関数から、クラスで作成したメソッド(、、setBalanceおよび)を呼び出すことです。setServiceChargeprocessCheckprocessDeposit

しかし、私はそれを実行させることができません、私はこれらのエラーメッセージで実行し続けます。

非静的メソッドsetBalance(double、int、double、boolean)は、静的コンテキストから参照できませんCheckingAccount.setBalance(trAm、tCode、curCharge、monthCh);

4

3 に答える 3

1

間違っているクラス名を介して呼び出してsetBalanceいます....setBalance()メソッドは非静的であるため、クラスではなく、クラスの特定のインスタンスに定義されています..

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

CheckingAccountメソッドを呼び出すには、 のインスタンスを作成する必要があります。

第二に、あなたconstructorの ofCheckingAccountクラスでは、 の引数を渡していませんがtotalService、未知の変数で引数を設定しています..そこでコンパイラエラーが発生します..totalServiceCharge固定値で初期化する必要があるか、またはできますmain.. から引数として渡し、コンストラクターを以下のように変更します。

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

次に、メインから、次のように呼び出します: -

CheckingAccount ca = new CheckingAccount(bal, totalServiceCharge);
于 2012-09-26T04:17:11.940 に答える
0

考えられる解決策の1つは次のとおりです。

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

もう1つの方法は、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;
   }

最初のアプローチは2番目のアプローチよりも理にかなっていると思います。

于 2012-09-26T04:10:28.137 に答える
0

CheckingAccount.setBalanceおよびCheckingAccount.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);
}
于 2012-09-26T04:14:42.850 に答える