【问题标题】:Calling an external class object from function on main class从主类上的函数调用外部类对象
【发布时间】:2012-09-17 15:31:39
【问题描述】:

我正在编写一个跟踪不同交易的程序 随着时间的推移完成。我有一个主类,还有另一个名为 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(double,int,double,boolean) CheckingAccount.setBalance(trAm,tCode,curCharge,monthCh);

【问题讨论】:

    标签: java class function main


    【解决方案1】:

    您通过错误的类名调用您的setBalance....setBalance() 方法是非静态的,因此它被定义为类的特定实例,而不是类..

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

    您需要创建CheckingAccount 的实例来调用该方法..

    其次,在CheckingAccountconstructor 类中,您没有为totalService 传递任何参数,但是您正在使用未知变量设置一个.. 你会在那里得到一个编译器错误.. 要么你需要用一个固定值初始化你的totalServiceCharge,要么你可以把它作为一个参数从 main.. 中传递。然后改变你的构造函数,如下所示..

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

    然后从 main 中,这样调用它:-

    CheckingAccount ca = new CheckingAccount(bal, totalServiceCharge);
    

    【讨论】:

      【解决方案2】:

      一种可能的解决方案是:

      您需要在调用方法之前为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;
         }
      

      我认为第一种方法比第二种方法更有意义。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-18
          • 1970-01-01
          • 1970-01-01
          • 2011-05-10
          • 1970-01-01
          相关资源
          最近更新 更多