Java 使用For循环NullPointerException搜索ArrayList
我一直收到此错误,但在代码中看不到任何逻辑错误 线程AWT-EventQueue-0 java.lang.NullPointerException中出现异常 我尝试将I更改为1,但仍然收到NullPointerException。Java 使用For循环NullPointerException搜索ArrayList,java,oop,nullpointerexception,Java,Oop,Nullpointerexception,我一直收到此错误,但在代码中看不到任何逻辑错误 线程AWT-EventQueue-0 java.lang.NullPointerException中出现异常 我尝试将I更改为1,但仍然收到NullPointerException。 错误似乎位于int位置=locateStock;但是我不确定。当您尝试引用在程序执行过程中未声明的对象时,会发生NullPointerException 当您尝试将i的初始值更改为1时仍然出现异常,这一事实告诉我,当您调用locateStock时,您的TechStoc
错误似乎位于int位置=locateStock;但是我不确定。当您尝试引用在程序执行过程中未声明的对象时,会发生NullPointerException 当您尝试将i的初始值更改为1时仍然出现异常,这一事实告诉我,当您调用locateStock时,您的TechStock列表在调用locateStock之前没有使用新的List语句初始化。因此,当您尝试使用stocks.size声明for循环时,会出现一个异常,因为stocks在该点为null
但是,很难说如何准确地解决您的问题,因为您的代码片段中没有提供足够的信息让任何人知道该代码如何与程序的其余部分相适应。您认为您提供了足够的信息吗?请参阅此链接:您以备将来参考,最好显示整个堆栈,并指出代码的行。根据您的错误描述,我们不知道具体发生在哪里。这尤其困难,因为您没有粘贴整个代码,我们只是猜测NullPointerException可能在哪里。我建议您阅读堆栈跟踪以查看哪一行是原因,然后在这一行上添加断点,并在IDE的调试器中运行程序。然后,您将能够看到哪个值为null。@PeterLawrey为堆栈跟踪错误设置coem的行是ifstocks.geti.getCode.equalpurchasecode.getText和int position=locateStock;TechStock和所有其他子类型都是属于同一arrayList股票的子类。问题不在于TechStock,而在于arrayList股票本身。如果您在尝试调用size或使用size之前没有实例化它,您将得到一个异常。因为在上面的一条注释中,您指出了这一行作为错误的位置:ifstocks.geti.getCode.equalpurchasecode.getText,这意味着:如果stocks为null,则stocks.geti将抛出异常,我怀疑是这样,因为在您的代码中没有看到新的ArrayList。如果索引i处的TechStock对象为null,则b stocks.geti.getCode将引发异常。stocks在此处初始化:private ArrayList stocks=new ArrayList;。你能不能详细谈谈b点,因为我感觉那里发生了错误。
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);
.....
}