2016-03-24 12 views
-2

このエラーは引き続き発生しますが、私のコードには論理エラーはありません。ForループでのArrayListの検索NullPointerException

Exception in thread "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); 
..... 
} 

私は1にIを変えてみましたが、私はまだNullPointerExceptionを受けます。 エラーはint position = locateStock();にあるようですが、わかりません。

+5

あなたは十分な情報を与えていると思いますか? –

+7

このリンクを参照してください:http://stackoverflow.com/q/218384/3973077 –

+0

今後の参照のために、スタック全体を表示し、どのコード行が表示されるかを指摘することが常にベストです。あなたのエラーの説明では、どこが正確に起こるか分かりません。コード全体を貼り付けていないため、NullPointerExceptionがどこにあるかを推測しているだけなので、特に難しいです。 –

答えて

-1

NullPointerExceptionは、プログラムの実行中にその時点で宣言されていないオブジェクトを参照しようとすると発生します。

あなたは私に1あなたはlocateStock()を呼び出すときに、TechStocksのあなたのリストの前locateStock()を呼び出すnew List<TechStock>()文で初期化されていないことを私に告げるの初期値を変更しようとしたとき、あなたはまだ例外を得ているという事実。したがって、stocks.size()を使用してforループを宣言しようとすると、その時点でstocksがnullであるため、例外が発生します。

しかし、他のプログラムとの文脈でコードがどのように適合しているかを誰かが知るための十分な情報をスニペットに実際に提供していないため、問題を正確に修正する方法を言うのは難しいです。

+0

TechStockと他のすべてのサブタイプは、すべて同じ配列リストに入るすべてのサブクラスです。 –

+0

それは問題であるTechStockではなく、ArrayListそのものです。 size()またはget()を呼び出す前にインスタンス化していない場合、例外が発生します。上記のコメントの1つでは、エラーの場所としてこの行が指摘されているので、 'if(stocks.get(i).getCode()。equals(purchaseCode.getText()))'と書かれているので、これは以下を意味します。 a)株式がnullの場合、 'stocks.get(i)'は例外をスローします。これは、あなたのコードのどこにも新しいArrayList()が表示されないためです。 b)インデックスiのTechStockオブジェクトがnullの場合、 'stocks.get(i).getCode()'は例外をスローします。 – NAMS

+0

株式はここで初期化されます:private ArrayList stockss = new ArrayList ();.あなたはエラーが発生していると感じるので、ポイントbを拡大してください。 –

関連する問題