当我第一次运行此代码时,它工作正常,但在使用几个不同的测试值测试后,我开始得到nullPointerException,现在无论我给出什么值,它都不起作用。我在网上浏览了一下,如果我正确理解了JavaDoc,当你尝试在尚未初始化的变量上调用方法时,会得到NullPointerException。这意味着BestCustomer对象没有被初始化但我无法弄清楚为什么这是因为它在我调用getWho方法之前在for循环中初始化并且如果arrayList中没有对象(意味着什么都没有被初始化 - 或者至少我认为它确实如此)我不称之为方法。为什么我得到nullPoiterException?
package hwk4;
import java.util.ArrayList;
public class Store {
ArrayList<Customer> database = new ArrayList<Customer>();
Customer person, bestCustomer;
int totalSales;
public void addSale(String customerName, double amount) {
Customer sale = new Customer(customerName, amount);
database.add(sale);
}
public String nameOfBestCustomer() {
if (database.isEmpty()) {
return "You have made 0 sales today.";
} else {
double largest = database.get(0).getAmt();
for (int count = 1; count < database.size(); count++) {
if (database.get(count).getAmt() > largest) {
largest = database.get(count).getAmt();
bestCustomer = database.get(count);
}
// return nameof best customer
}
return bestCustomer.getWho();
}
}
}
答案 0 :(得分:5)
如果是第一项,则需要更新bestCustomer
。
double largest = database.get(0).getAmt();
bestCustomer = database.get(0);
在您的代码中,如果最佳客户是第一项,则永远不会更新bestCustomer
变量,这会在调用时导致NPE
:
return bestCustomer.getWho();
答案 1 :(得分:0)
您应该在其他条件中添加bestCustomer = database.get(0);
。
如果第一位客户是最好的客户。这意味着在for循环中,永远不会分配bestCustomer。它仍然是 null 。
在这种情况下,执行以下代码时
return bestCustomer.getWho();
抛出NullPointerException。