【问题标题】:Calling and passing parameters from one class to another从一个类调用和传递参数到另一个类
【发布时间】:2016-05-03 15:05:18
【问题描述】:

我将如何从 AccountApplet 类中的 Account 类调用 setBalance() 方法,我相信它应该进入 AccountApplet 类的 actionPerformed 方法中。

请注意,当我在 actionperformed 中创建新帐户对象时,我收到此错误 AccountApplet.java:83:错误:类 Account 中的构造函数 Account 不能应用于给定类型; Account account = new Account().setBalance; ^ 必需:int,double 发现:没有参数 原因:实际参数列表和形式参数列表的长度不同

这是我的 Account 类

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;



    public class Account
    {
      int id         = 1234;
      double balance = 1000.00;

      Account (int id, double balance)
      {
        id      = 1234;
        this.balance = balance;
      }

      public int getId()
      {

        return id; 
      }

      public double getBalance()
      {
        return balance;   
      }

      public void setBalance(double balance) throws NegativeAmountException
      {
        if ( balance < 0)
          throw new NegativeAmountException();
        this.balance = balance;
      }

      public void deposit(double amount) throws NegativeAmountException
      {
        if (amount < 0)
        throw new NegativeAmountException();
        balance += amount;
      }

      public void withdraw(double amount) throws NegativeAmountException,
                                                 InsufficientFundsException
      {

        if (amount <= balance )
        {
          throw new NegativeAmountException();
        }

        if (amount <= balance )
        {
          throw new InsufficientFundsException();
        }

        balance -= amount;


      }

    }

调用最终会去的AccountApplet类,refreshfields方法中有一个account对象

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import java.text.NumberFormat;


public class AccountApplet extends JApplet implements ActionListener
{    
  //  For West
  public JLabel  ai       = new JLabel("Account ID ");
  public JTextField  aitf = new JTextField();
  public JLabel  ab       = new JLabel("Account Balance ");
  public JTextField  abtf = new JTextField();

  //  For East
  public JButton     dp   = new JButton ("Deposit");
  public JTextField  dptf = new JTextField();
  public JButton       wt = new JButton ("Withdraw");
  public JTextField  wttf = new JTextField();

  // For South
  public JLabel  status   = new JLabel("");  

  public void init()
  {
    this.setSize(400, 90);

    //----------------------
    //  Set up the Structure
    //----------------------

    Container      c = getContentPane();
    JPanel         b = new JPanel(new BorderLayout());
    JPanel      west = new JPanel(new GridLayout(2,2));
    JPanel      east = new JPanel(new BorderLayout());
    JPanel depo_with = new JPanel(new GridLayout(2,2));

    // Add BorderLayout to the container
    c.add(b);

    // Add everything to West
    b.add(west, BorderLayout.WEST);
    west.setBorder(new TitledBorder("Display Account Information"));
    west.add(ai);
    west.add(aitf);
    aitf.setEditable(false);
    west.add(ab);
    west.add(abtf);
    abtf.setEditable(false);

    // Add everything to EAST
    b.add(east, BorderLayout.EAST); 
    east.setBorder(new TitledBorder("Deposit or Withdrawl Funds"));    
    east.add(depo_with, BorderLayout.EAST);    
    depo_with.add(dptf);
    depo_with.add(dp);
    depo_with.add(wttf);
    depo_with.add(wt);   
    dp.addActionListener(this);
    wt.addActionListener(this);

    // Add everything to SOUTH
    b.add(status, BorderLayout.SOUTH);

    refreshFields();

  }  // End intit

  public void actionPerformed(ActionEvent e)
  {

    if (e.getSource() == dp)  //  Executes if deposit was clicked
    {
      try 
      {
        getAmount(dptf);
        status.setText("Deposit processed");

       refreshFields();
      } 


      catch (NegativeAmountException nae) 
      {  
       status.setText(nae.getMessage() + " not allowed for deposit");
      }
      catch (EmptyFieldException efe) 
      {  
       status.setText(efe.getMessage() + " not allowed for deposit");
      }
      catch (Exception ex) 
      { 
       status.setText(ex.getMessage() + " not allowed for deposit");
      }    

    }    


    if (e.getSource() == wt)  //  Executes if withdraw was clicked
    {
      try 
      {
        getAmount(wttf);
        status.setText("Withdraw processed");

        refreshFields();
      } 
     // catch (InsufficientFundsException ife) 
     // {  
     //  status.setText(ife.getMessage() + " Insufficient funds");
     // }
      catch (NegativeAmountException nae) 
      {  
       status.setText(nae.getMessage() + " not allowed for withdraw");
      }
      catch (EmptyFieldException efe) 
      {  
       status.setText(efe.getMessage() + " not allowed for withdraw");
      }
      catch (Exception ex) 
      {
        // Something went wrong - handle your error here
        status.setText(" for withdraw");
      }

      refreshFields();
    }
  }


  public void refreshFields()
  {
    NumberFormat fmt = NumberFormat.getCurrencyInstance();
    Account Account1 = new Account(1234, 1000.00);
    aitf.setText("" + Account1.getId());
    abtf.setText("" + fmt.format(Account1.getBalance()));

    // diplays accound id and balance in left text fields
    //should be called when the applet is first displayed and after each valid transaction
  }

 public double getAmount(JTextField tf) throws EmptyFieldException,
                                               NumberFormatException,
                                               NegativeAmountException
 {
   double depo;

   try 
   {
     depo = Double.parseDouble(dptf.getText());  // read in one textfield and convert to a number
   } 
     catch (NumberFormatException nfe)  // catch NumberFormatException
   {
     throw nfe;  // catch throws NumberFormatException
   }



    return depo;
  }  //  End    



} // End Class

【问题讨论】:

  • 需要更多信息。您的 AccountApplet 类中有 Account 对象吗?
  • 您需要在“if”结构的相关子句中调用存款或取款函数。顺便说一句,您的提款功能中有重复的 if 子句....

标签: java methods call


【解决方案1】:

如果你想使用它,你需要在 AccountApplet 类中实例化一个 Account 对象。这将与您定义的其他属性一起放在 AccountApplet 类的顶部

*不要忘记添加参数(我随机选择了1和20)

Account newAccount = new Account(1, 20);

您现在可以使用对象方法。例如,如果您想存入一笔金额,您可以执行以下操作:

public void actionPerformed(ActionEvent e)
{

  if (e.getSource() == dp)  //  Executes if deposit was clicked{
    try 
    {
      getAmount(dptf);

      newAccount.deposit(dptf)

      status.setText("Deposit processed");

     refreshFields();
    } 

代码行

newAccount.deposit(dptf)

调用Account类的存款方法

您可以在此处看到余额也在更新(查看 Account 类中的 deposit 方法)

线

balance += amount

更新余额(这行代码相当于balance = balance + amount)

【讨论】:

  • 更新了关于余额如何更新的说明
【解决方案2】:

请创建 Account 类的实例,然后像这样调用传入参数的 setBalance 方法

public void actionPerformed(ActionEvent e)
  {
    Account account=new Account(1,0);//where 1 is your account id and 0 is your initail balance
   //Yor call here
    if (e.getSource() == dp)  //  Executes if deposit was clicked
    {
      try 
      {
        account.setBalance(20);
        getAmount(dptf);
        status.setText("Deposit processed");

       refreshFields();
      } 


      catch (NegativeAmountException nae) 
      {  
       status.setText(nae.getMessage() + " not allowed for deposit");
      }
      catch (EmptyFieldException efe) 
      {  
       status.setText(efe.getMessage() + " not allowed for deposit");
      }
      catch (Exception ex) 
      { 
       status.setText(ex.getMessage() + " not allowed for deposit");
      }    

    }    

【讨论】:

  • 我收到此错误 AccountApplet.java:83: error: constructor Account in class Account cannot be applied to given types;账户账户 = 新账户(); ^ 必需:int,double 找到:无参数原因:实际参数列表和形式参数列表的长度不同
  • 请我编辑 ans 以将参数包含到构造函数中。用实际值替换那些
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多