В другом методе (ALGO_1) я выполняю поиск элементов <background>
и проверяю, что значение H_NAME равно значению, введенному в main. Когда я пытаюсь запустить код, я получаю исключение нулевого указателя. При попытке напечатать (System.out.println
и т. Д.) Значение H_NAME после каждого цикла for во фрагменте, я также получаю нулевое выражение, возвращаемое мне.
Я вполне уверен, что коллекция просто не хранит данные, собранные сканером. Но когда я проверяю размер коллекции с 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;
}