Java 如何避免空属性?
我正在进行一个练习,在这个练习中,我构建了一个银行系统,创建了一个account类、一个client类和一个bank类,但是当我检查程序时,我得到: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
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);
}
}