当前位置: 首页 > 知识库问答 >
问题:

与Java类有关的问题

凌永逸
2023-03-14

我遇到了一个家庭作业的麻烦,创建一个调用另一个类的方法的类。给我们下一课:

/**
A bank account has a balance that can be changed by 
deposits and withdrawals.
*/
public class BankAccount
{  
   private double balance;

/**
Constructs a bank account with a zero balance.
*/
public BankAccount()
{   
  balance = 0;
}

/**
  Constructs a bank account with a given balance.
  @param initialBalance the initial balance
*/
public BankAccount(double initialBalance)
{   
  balance = initialBalance;
}

/**
  Deposits money into this account.
  @param amount the amount to deposit
*/
     public void deposit(double amount)
{  
    balance = balance + amount;
}

 /**
  Makes a withdrawal from this account, or charges a penalty if
  sufficient funds are not available.
  @param amount the amount of the withdrawal
  */
 public void withdraw(double amount)
{   
   final double PENALTY = 10;
   if (amount > balance)
  {
     balance = balance - PENALTY;
  }
  else
  {
      balance = balance - amount;
  }
}

/**
   Adds interest to this account.
   @param rate the interest rate in percent
*/
public void addInterest(double rate)
{   
   double amount = balance * rate / 100;
   balance = balance + amount;
}

/**
   Gets the current balance of this account.
   @return the current balance
*/
public double getBalance()
{   
   return balance;
  }
}

然后给出以下提示:

实现一个类Portfolio。这个类有两个对象,checking和savings,类型为BankAccount。实现四种方法:

  • 公用无效存款(双倍金额,字符串帐户)
  • 公开无效提取(双倍金额,字符串帐户)
  • 公有作废转账(双倍金额,字符串账户)
  • 公共双getBalance(字符串帐户)

这里的帐户字符串是“s”或“c”。对于存款或取款,它表示哪个帐户受到影响。对于转账,它表示取钱的帐户;这笔钱会自动转到另一个账户。“

下面是我所做的:

public class Portfolio 
{
 BankAccount checking;
 BankAccount savings; 

 public void deposit(double x, String y)
 {
    if (y.equals("C"))
    {
        checking.deposit(x);
    }
    else if (y.equals("S"))
    {
        savings.deposit(x);
    }
}


public void withdraw(double x, String y)
{
    if (y.equals("C"))
    {
        checking.withdraw(x);
    }
    else if (y.equals("S"))
    {
        savings.withdraw(x);
    }
}


//public void transfer(double amount, String account)
//{
//  add later
//}

public double getBalance(String account)
{
    if (account.equals("C"))
    {
        return checking.getBalance();
    }
    else
    {
        return savings.getBalance();
    }
   }
}

但这样我就连存款的方法都用不上了。当我运行这个程序时...

public class PortfolioTester
{
    public static void main(String [] args)
    {
        Portfolio money = new Portfolio();
         money.deposit(700, "S");

    }

}

我得到这个错误:

线程“main”java.lang.NullPointerException在Portfolio.deposite(Portfolio.java:14)在PortfolioTester.main(PortfolioTester.java:6)

我想我有点误会了类是怎么工作。谁能给我指出正确的方向吗?

共有1个答案

杨乐意
2023-03-14

您之所以会出现这些错误,是因为您必须初始化存款方法中使用的BankAccount类。我建议在portfolio类中放置一个构造函数(类通常应该有初始化类属性的构造函数)。在组合构造函数中,可以初始化银行帐户类“检查”和“储蓄”。

记住对于非静态方法,您必须有一个类的实例才能调用它的方法。

 类似资料:
  • 问题内容: Java 8的Java语言规范在“示例4.11-1。类型的用法”中提供了一个带有类型实参的方法调用示例: 在该示例中,提供的类型实参是有意义的,但显然用于方法调用的类型实参也可以是多余的,并且完全没有意义,并且甚至不需要涉及泛型。例如: 我有几个问题: 谁能提出Java允许这些冗余类型参数的正当理由?接受它们无害后,在我看来,编译器仍然可以并且应该抓住它们。 仅当带有类型实参的方法调用

  • 但是,当我使用命令行中的ndk-build命令编译它时,会出现以下错误: Android NDK:APP_PLATFORM未设置。默认为最小支持版本Android-16。[arm64-v8a]编译:com_celik_abdullah_imageprocessingpart_processors_NativeImageProcessor<=com_celik_Abdullah_ImageProce

  • 用户连接RADIUS客户端; RADIUS客户端又连接到RADIUS服务器。如果客户端似乎无法与服务器连接,请首先检查以下内容: FreeRADIUS知道这个客户吗?检查FreeRADIUS日志文件中的以下行: Wed May 18 17:53:57 2012 : Error: Ignoring request to authentication address * port 1812 from

  • 问题内容: 我有一个代码, 我使用运行时锁定-解锁,因为我不希望例程1的打印与例程2混合使用。但是,执行上述代码后,其输出与没有锁定- 解锁的输出相同(意味着打印输出混合在一起)。谁能帮助我为什么这件事发生以及如何迫使这件事发生。 注意:我举了一个打印示例,但是有很多打印和发送事件。 问题答案: 如果您要 序列化 “打印某物”,例如,每个“打印某物”应自动执行,则只需对其进行 序列化即可 。 您可

  • 资源结构 webcontent/resources/img/logo.png

  • 问题内容: 我看到了这个问题, 所以我对此问题有一个疑问:在以下查询中,在相同日期我得到的结果是不同的。 按列输出: 请帮助我,在此先谢谢。 编辑 我写了一个简单的过程,通过它可以找到下面给出的日期: EXEC simple_test(sysdate); EXEC simple_test(‘01 -JAN-2013’); 为什么会这样? 问题答案: 我想解释一下为什么您会得到不同的结果。 看到这个