Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何避免空属性?_Java_Eclipse - Fatal编程技术网

Java 如何避免空属性?

Java 如何避免空属性?,java,eclipse,Java,Eclipse,我正在进行一个练习,在这个练习中,我构建了一个银行系统,创建了一个account类、一个client类和一个bank类,但是当我检查程序时,我得到: Exception in thread "main" java.lang.NullPointerException. 以下是我的课程: package bank.elements; public class Account { private int id; private float balance; //cons

我正在进行一个练习,在这个练习中,我构建了一个银行系统,创建了一个account类、一个client类和一个bank类,但是当我检查程序时,我得到:

Exception in thread "main" java.lang.NullPointerException.
以下是我的课程:

package bank.elements;

public class Account {

    private int id;
    private float balance;

    //constructors
    public Account(int id, float balance){
        this.setId(id);
        this.setBalance(balance);
    }

    public Account (int id){
        this.id=id;
        this.setBalance(0);
    }


    //getters
    public int getId(){
        return this.id;

    }

    public float getBalance(){
        return this.balance;
    }


    //setters
    public void setBalance(float balance){
        this.balance+=balance;
    }

    public void setId(int id){
        this.id=id;
    }

}



package bank.elements;

public class Client {

    private int id;
    private String name;
    private String rank;
    private float balance;
    private Account[] accounts = new Account[100];

    public Client(){

    }

    //getters
    public int getId(){
        return id;
    }

    public String getName(){
        return name;
    }

    public String getRank(){
        return rank;
    }

    public float getBalance(){
        return balance;
    }

    public float getAccountBalance(int id){

        float balance = 0;
        for (int i = 0; i < accounts.length; i++) {
            if(accounts[i].getId()==id){
                balance = accounts[i].getBalance();
            }
        }
        return balance;
    }

    public float getFortune(){
        float sum = 0;
        for (int i = 0; i < accounts.length; i++) {
            sum+=getAccountBalance(i);
        }
        sum+=getBalance();
        return sum;
    }

    //setters
    public void setName(String name){
        this.name = name;
    }

    public void setBalance(float balance){
        this.balance+=balance;
    }

    public void setId(int id){
        this.id=id;
    }

    public void addAccount(int id){
        for (int i = 0; i < accounts.length; i++) {
            if(accounts[i]==null){
                accounts[i].setId(id);
            }
        }
    }

}



package bank.elements;

public class Bank {

    public Bank(){

    }

    public Client[] clients = new Client[100];

    public float getBalance(){
        float sum = 0;

        for (int i = 0; i < clients.length; i++) {
            sum+= clients[i].getFortune();
        }
        return sum;
    }

    public void addClient(){
        for (int i = 0; i < clients.length; i++) {
            if(clients[i] == null){
                clients[i].setId(i);
            }
        }

    }

    public void removeClient(int id){
        for (int i = 0; i < clients.length; i++) {
            if(clients[i].getId()==id){
                clients[i]=null;
                for (int j = (i+1); j < clients.length; j++) {
                    clients[j] = clients[j-1];
                }

            }
        }
    }
}
我缺少什么?

在您的
addClient()方法中:

for (int i = 0; i < clients.length; i++) {
      if(clients[i] == null){
           clients[i].setId(i);
      }
 }
更改
addClient()
方法中的if(执行
if client[i]!=null以防止NPE),即:

for(int i=0;i
对于您的
客户机
类和
帐户的数组
有相同的注释


也考虑读这个:

你在哪里得到NPE。请提供stacktrace和相关代码。我是在addClient()函数行获得的,我的问题是没有先用对象初始化数组,@user2336315帮助我理解它如果为null,则您正在对它执行操作。它将给予NPE而不是阻止它。检查应该是=@AniketThakur是的,我加了一句。谢谢!我只是没有意识到我没有初始化客户机[i],我只是假设通过设置客户机[i].setId(i);我给空一个值,非常感谢!
for (int i = 0; i < clients.length; i++) {
      if(clients[i] == null){
           clients[i].setId(i);
      }
 }
public Bank(){
   for(int i = 0; i < clients.length; i++){
      clients[i] = new Client();
   }
}
for (int i = 0; i < clients.length; i++) {
      if (client[i] != null){
          clients[i].setId(i);
     }
 }