0

当我第一次运行此代码时,它运行良好,但在使用几个不同的测试值对其进行测试后,我开始得到 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();
        }
    }
}
4

2 回答 2

5

bestCustomer如果它是第一项,则需要更新。

double largest = database.get(0).getAmt();
bestCustomer = database.get(0);

在您的代码中,如果最好的客户是第一项,您永远不会更新bestCustomer变量,这将NPE在调用时导致:

return bestCustomer.getWho();
于 2013-11-12T15:29:27.543 回答
0

您应该添加else条件bestCustomer = database.get(0);

如果第一个客户是最好的客户。这意味着在 for 循环中,永远不会分配 bestCustomer。它仍然是null

在这种情况下,执行以下代码时

return bestCustomer.getWho();

抛出 NullPointerException。

于 2013-11-12T15:36:15.437 回答