创建用户定义的异常类,将null作为答案(JAVA)

创建用户定义的异常类,将null作为答案(JAVA),java,exception-handling,Java,Exception Handling,我试图实现以下问题,但在尝试将值传递给该方法时,得到的答案是null。在提取时计算新余额后,我似乎无法将值传递给方法转移。 帐户类别: package Number3; public class Account { private int balance; private int maxTransfer; public Account() { balance = 0; maxTransfer = 0; } public Account(int bal,int maxT)

我试图实现以下问题,但在尝试将值传递给该方法时,得到的答案是null。在提取时计算新余额后,我似乎无法将值传递给方法转移。

帐户类别:

package Number3;

public class Account {

private int balance;
private int maxTransfer;

public Account()
{
    balance = 0;
    maxTransfer = 0;
}

public Account(int bal,int maxT)
{
    balance = bal;
    maxTransfer = maxT;
}

public void setBalance(int b)
{
    balance = b;
}

public int getBalance()
{
    return balance;
}

public void setMaxTransfer(int m)
{
    this.maxTransfer = m;
}

public int getMaxTransfer()
{
    return maxTransfer;
}

public void withdraw(int amount) throws insufficientFundException
{
    if(!(amount < balance))
    {
        balance = balance - amount;
    }
    else
    {
        throw new insufficientFundException();
    }
}

public void transfer(int amount)
{
    balance = amount + balance;
}

public void display()
{
    System.out.println("Current balance: "+getBalance());
}
}
以及用户定义的异常的类:

package Number3;

public class insufficientFundException extends Exception{

public static void main(String[] args) {
    System.out.println("You don't have enough funds in your account.");

}

}

请告诉我我做错了什么。谢谢。

您错误地实现了自定义异常。您需要使用消息调用Exception类中的超级构造函数,如:

class MyCustomException extends Exception {

    MyCustomException(String message) {
        super(message);
    }
}
如其他人所述,您需要使用如下消息调用您的异常:

throw new MyCustomException("Error message");

首先,您使用的是getter来获取balance\maxtranfer,而不是打印它

您无法执行传输,因为在您退出后,开关断开,执行结束


还请注意,您正在自定义的异常类中实现另一个main()方法。

此main方法永远不会被调用。将异常添加到构造函数中的超类

package Number3;

public class insufficientFundException extends Exception{

    insufficientFundException(String msg){
       super(msg);
    }

}
在代码中,发生异常时抛出该异常

if(balance-withdrawal<0){
   throw new insufficientFundException("Your error message");
}

if(余额提取您的类应该是这样的

package Number3;

    public class InsufficientFundException extends Exception{

    public InsufficientFundException(String message){
      super(message);
    }
}
然后,通过传入希望在运行时显示的字符串值,创建此异常类的新实例

标准范例

public void withdraw(int amount) throws insufficientFundException
{
   if(!(amount < balance))
   {
       balance = balance - amount;
   }
   else
   {
       throw new InsufficientFundException("You do not have enough money in your account");
   }
}
public void draw(int amount)抛出InventificientFundException
{
如果(!(金额<余额))
{
余额=余额-金额;
}
其他的
{
抛出新的InsufficientFundException(“您的帐户中没有足够的钱”);
}
}
另外,我刚刚意识到你的if-else语句可能是错误的,因为你告诉程序如果金额不小于余额,在你应该说如果金额小于余额时,从余额中取出金额,从帐户中取出钱

像这样

if(amount < balance)
   {
       balance = balance - amount;
   }
   else
   {
       throw new InsufficientFundException("You do not have enough money in your account");
   }
if(金额<余额)
{
余额=余额-金额;
}
其他的
{
抛出新的InsufficientFundException(“您的帐户中没有足够的钱”);
}

问题出在哪里?是否出现异常?输出是否错误?请确保包含问题的所有详细信息。当我输入要提取的金额时,它应该再次显示余额,但我的回答为空。即使我输入的金额超过余额。顺便说一句:您的异常不正确。您应该被拒绝将消息传递给Exception的构造函数,而不是在其中创建另一个
main
方法。在程序的正常流程中,
main
方法将永远不会被调用。那么,您在调试器中逐行检查了每一行代码了吗?@Makoto您能告诉我怎么做吗?我是新手。刚刚在c中学习过这一点lass.为什么出现
RuntimeException
?对我来说,问题发生在运行时,所以我有RuntimeException,但如果你也有异常,这没什么区别,它们几乎都是一样的
RuntimeException
是针对未检查的异常。它们非常不同。我尝试了它,它成功了。另外,它是pr正在初始化null,因为我没有使用display方法。我将其改为a.display()。很高兴能提供帮助,请注意您的if-else循环:)谢谢,我改为使用a.display(),它打印了新的余额。
if(amount < balance)
   {
       balance = balance - amount;
   }
   else
   {
       throw new InsufficientFundException("You do not have enough money in your account");
   }