#java #nullpointerexception #hashset #apriori
#java #исключение nullpointerexception #хэш-набор #априори
Вопрос:
Я разрабатываю программу apriori, которая должна подсчитывать, сколько раз определенный атрибут house появляется в текстовом файле. Программе необходимо подсчитать, сколько раз атрибут появляется сам по себе, сколько раз атрибуты появляются парами и группами по 3 . Я создал класс Subjects, который по существу соединяет атрибуты. Моей целью было прочитать файл, использовать класс subjects для разделения атрибутов на определенные категории и создать ArrayList этих атрибутов. Затем я создал HashSet атрибутов (и комбинаций атрибутов), используя вложенные циклы, я увеличу счетчик атрибутов в HashSet, чтобы определить, сколько раз они появляются.
Проблема в том, что я получаю исключение нулевого указателя в моем хэш-наборе. Я проверил, чтобы убедиться, что объект, который я добавляю в набор, не равен null, а его значения не равны null, но исключение все еще существует. Есть предложения? Я опубликую некоторые фрагменты кода ниже, но, пожалуйста, дайте мне знать, если вам нужно больше.
//This is the loop giving me an error on the first iteration through:
for (Subjects s: subjectListTwoElement){
if(!s.equals(null)amp;amp;!s.identifier.equals(null)amp;amp;!s.partner.equals(null)){
System.out.println(s.identifier s.partner s.count);
subjectHolder.add(s);
}
}
Это мои переменные и класс subjects:
static ArrayList <Subjects> subjectList=new ArrayList();
static ArrayList <Subjects> subjectListTwoElement=new ArrayList();
static ArrayList <String> stringHolder=new ArrayList();
//keeps track of possible sets
static Set <String> ssv=new HashSet();
//possible values in next iteration
static Set <Subjects> subjectHolder=new HashSet();
static class Subjects {
public String identifier="";
public String partner="";
public String partner2="";
int count;
public Subjects(String identifier, int count) {
this.identifier = identifier;
this.count=count;
}
public Subjects(String identifier, String partner, int count) {
this.identifier = identifier;
this.partner=partner;
this.count=count;
}
public Subjects(String identifier, String partner, String partner2, int count) {
this.identifier = identifier;
this.partner=partner;
this.partner2=partner2;
this.count=count;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Subjects other = (Subjects) obj;
if (identifier.equals(other.identifier)amp;amp;partner.equals(other.partner)) {
return true;
}
return false;
}
}
Это мой вывод:
Single Attributes:
Curb: 598
Paved: 6834
Asphalt: 11087
Curb amp; Gutter: 3483
Unknown: 4731
Double Attributes:
CurbAsphalt0
Exception in thread "main" java.lang.NullPointerException
at Code.printDouble(Code.java:178)
at Code.main(Code.java:77)
Ответ №1:
вы должны изменить тест !s.identifier.equals(null)
на s.identifier != null
и сделать то же самое для теста на s.partner
.
s.identifier.equals(null)
выдаст исключение NullPointerException, если s.identifier
оно равно нулю, поскольку вы пытаетесь вызвать метод для этого объекта.
Пожалуйста, дайте мне знать, если это полезно.
-Kaj 🙂