使用For循环NullPointerException搜索ArrayList

时间:2016-03-24 21:32:51

标签: java oop nullpointerexception

我一直收到此错误但我在代码中看不到任何逻辑错误。

  

线程中的异常" AWT-EventQueue-0"显示java.lang.NullPointerException

private double getValueOrDefault(String symbol, double defaultValue) {
    double value = getValue(symbol);

    if (value != -1)
        return value;
    else
        return defaultValue;
}

public void createStocks() {
    // try get stock realtime values
    stocks.add(new TechStock("BB", 30.3));
    stocks.add(new TechStock("GOOG", getValueOrDefault("GOOG", 5.8)));
    stocks.add(new TechStock("AMZN", getValueOrDefault("AMZN", 6.3)));
    stocks.add(new FinanceStock("GLNG", getValueOrDefault("GLNG", 121)));
}

public static double getValue(String symbol) {
    // read data
    try {
        URL url = new URL(API_URL.replace("XXX", symbol));
        Scanner s = new Scanner(url.openStream());

        // find price
        while (s.hasNextLine()) {
           String line = s.nextLine();

           if (line.startsWith("\"price\"")) {
               // split shenanigans
               String[] f = line.split("\"");
               return Double.parseDouble(f[3]);
           }
        }

       // if we reached here: the stock is invalid
       return -1;
    } catch (Exception ex) {
       ex.printStackTrace();
    }
    return -1;
}


public class StockFrame extends Frame 
{
    private int amount;
    private Portfolio portfolio;
    private ArrayList <StockMarket> stocks = new ArrayList<StockMarket>();   
    private TextArea stockDetails;
    private TextField purchaseCode;
    private boolean found = false;

private int locateStock() {
    for(int i = 0; i<stocks.size(); i++) {
        if(stocks.get(i).getCode().equals(purchaseCode.getText())) { 
            return i;
        }
   }
   return -1;
}

private void a() {

int position = locateStock();
if(position != -1){
    StockMarket bs = stocks.get(position);
.....
}

我尝试将I更改为1,但仍然收到NullPointerException。 该错误似乎位于int position = locateStock();,但我不确定。

1 个答案:

答案 0 :(得分:-1)

当您尝试引用在程序执行时尚未声明的对象时,会发生NullPointerException。

当您尝试将i的初始值更改为1时仍然出现异常的事实告诉我,当您致电locateStock()时,您的TechStocks列表尚未使用new List<TechStock>()进行初始化在致电locateStock()之前的陈述。因此,当您尝试使用stocks.size()声明for循环时,会出现异常,因为此时stocks为空。

但是,很难说如何准确地解决您的问题,因为您没有真正在您的代码段中提供足够的信息,以便任何人都知道该代码如何适合您的程序的其他部分。