別のメソッド (ALGO_1) では、要素を検索し<background>
、値 H_NAME がメインに入力された値と等しいことを確認します。コードを実行しようとすると、null ポインター例外が発生します。System.out.println
スニペットの各 for ループの後に H_NAME 値を(などで) 出力しようとすると、null ステートメントも返されます。
コレクションが、スキャナーによって収集されたデータを格納していないことは確かです。でもコレクションサイズを で確認するとsize()
、ちょうどいいサイズです。
主な質問は次のとおりです。
- readBackground メソッドからの data.add は間違った場所にありますか?
- スニペットの構造が間違っているだけですか?
System.out.println
背景オブジェクトの値の名前、開始時間、増分などを確認するため に使用すると、正常に出力されます。
for (Hydro hd: hydros) {
System.out.println(hd.H_NAME);
for (Background back : backgs) {
System.out.println(back.H_NAME);
if (back.H_NAME.equals(hydroName)) { //get error here
public static Collection<Background> readBackground(String url) throws IOException {
URL u = new URL(url);
InputStream is = u.openStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader b = new BufferedReader(isr);
String line ="";
Vector<Background> data = new Vector<Background>();
while ((line = b.readLine())!= null) {
Scanner s = new Scanner(line);
String name = s.next();
double starttime = Double.parseDouble(s.next());
double increment = Double.parseDouble(s.next());
double sum = 0;
double p = 0;
double nterms = 0;
while ((s.hasNextDouble())) {
p = Double.parseDouble(s.next());
nterms++;
sum += p;
}
double pbmean = sum/nterms;
Background SAMP = new Background(name, starttime, increment, pbmean);
data.add(SAMP);
}
return data;
}