Java BlueJ错误“';无效';此处不允许输入“;

Java BlueJ错误“';无效';此处不允许输入“;,java,constructor,compiler-errors,bluej,Java,Constructor,Compiler Errors,Bluej,我正在做一个银行账户程序。它必须保存有关余额、帐户所有者姓名和帐号的信息。它还必须能够提取和存款,检查余额等。它还必须收取10美元的费用。我试图编写这个程序,但当我运行它时,BlueJ说“这里不允许使用'void'类型”。请帮忙。下面是我的程序 public class BankAccount { private double balance; private String name; private long accountNum; public BankAccount(double i

我正在做一个银行账户程序。它必须保存有关余额、帐户所有者姓名和帐号的信息。它还必须能够提取和存款,检查余额等。它还必须收取10美元的费用。我试图编写这个程序,但当我运行它时,BlueJ说“这里不允许使用'void'类型”。请帮忙。下面是我的程序

public class BankAccount
{
private double balance;

private String name;

private long accountNum;

public BankAccount(double initialBal, String owner, long number)
{
    balance = initialBal;
    name = owner;
    accountNum = number;
}

public void withdraw(double amount)
{
    if (balance >= amount)
    balance -= amount;
    else
    System.out.println("Insufficient funds");
}

public void deposit(double amount)
{
    balance += amount;
}

public double getBalance()
{
    return balance;
}

public void chargeFee()
{
    balance-=10;
}

public void changeName (String newName)
{

}
}




public class ManageAccounts
{
public static void main(String[] args)
{
    BankAccount acct1, acct2;

    acct1 = new BankAccount(1000, "Sam", 1111); //creates a new account

    acct2 = new BankAccount(500, "Alex", 2222); //creates a new account

    acct2.deposit(100); //deposits $100 into Sam's account

    System.out.println("Alex's balance is: " + acct2.getBalance()); //prints     balance

    acct1.withdraw(50); //withdraws $50 from Alex's account

    System.out.println("Sam's balance is: " + acct1.getBalance());

    System.out.println("Sam's balance is: " + acct1.chargeFee());

    System.out.println("Alex's balance is: " + acct2.chargeFee());

    acct2.changeName("Alexander"); //changes Alex's name to Alexander

    System.out.println( acct1 );

    System.out.println( acct2 );

}
} 

这是因为您在以下行中调用了方法:changeFee():

System.out.println("Sam's balance is: " + acct1.chargeFee());

System.out.println("Alex's balance is: " + acct2.chargeFee());
您将连接一个字符串,在第一种情况下,“Sam的余额是:”使用void类型,因为方法chargeFee()不返回任何内容(void),这是不允许的。如果这是您想要的,那么这可能是一个快速解决方案:

public String chargeFee()
{
    return String.valueOf(balance-=10);
}
编译它,运行它,您会得到:

Alex's balance is: 600.0
Sam's balance is: 950.0
Sam's balance is: 940.0
Alex's balance is: 590.0
BankAccount@677327b6
BankAccount@14ae5a5
我还发现您没有应用某些编码约定: 使用一些好的编码实践是很好的

方法change changeName()也没有做任何事情,您可以这样更改它:

public void changeName (String newName)
{
    name= newName;
}
最后,当你这样做的时候:

System.out.println( acct1 );
您正在对对象acct1调用toString()方法。请看这个:以获得更好的解释。但问题是你没有打印账户持有人的姓名。为此,您可以创建以下方法:

public String getName(){
    return name;
}
最后修改您的最后陈述:

 System.out.println( acct1.getName());

 System.out.println( acct2.getName());

这些对账单将打印帐户持有人的姓名。

它在哪里显示?@Stultuske当我编译它时。通常,这意味着你向它传递一个参数,该参数用作输入值,将被存储、操作或用作输出。但是,如果使用returntype void传递methodcall:int b=5+thisMethodReturnsVoid();会有这个问题,因为该方法不会返回可以添加到5的值,而不是何时何地。你的代码是哪一行?@Stultuske at System.out.println(“山姆的余额是:“+acct1.chargeFee()”);