nullPointException ...但是我初始化了变量(或者至少我认为)

gur*_*e94 0 java arraylist nullpointerexception

当我第一次运行这段代码时它工作得很好,但在用几个不同的测试值测试后,我开始得到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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Bob*_*der 5

bestCustomer如果它是第一个项目,您需要更新.

double largest = database.get(0).getAmt();
bestCustomer = database.get(0);
Run Code Online (Sandbox Code Playgroud)

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

return bestCustomer.getWho();
Run Code Online (Sandbox Code Playgroud)