Я хочу указать, является ли конкретный узел соседним с множеством узлов в определенном графе или нет? Для этого я написал этот метод:Специфический метод java возвращает исключение нулевого указателя
private boolean isNeighbor(ArrayList<Customer> collection, Customer node,DirectedSparseGraph<Customer, Transaction> network) throws SQLException {
for(Customer customer:collection){
if(network.isSuccessor(customer, node)) return true;
}
return false;
}
к сожалению этот способ возвращает null указатель исключение. Поэтому я решил изменить это на:
private boolean isNeighbor(ArrayList<Customer> collection, Customer node,DirectedSparseGraph<Customer, Transaction> network) throws SQLException {
Collection<Customer> nodes=network.getVertices();
ArrayList<Customer> acctualNodes = new ArrayList<Customer>();
Customer acctualNode=new Customer();
for(Customer customer: collection){
for(Customer cust:nodes){
if(cust.getName().equals(customer.getName())) acctualNodes.add(cust);
}
}
for(Customer customer: nodes){
if(node.getName().equals(customer.getName())) acctualNode=customer;
}
for(Customer customer: acctualNodes){
if(network.isSuccessor(customer, acctualNode)) return true;
}
return false;
}
Новый метод работает отлично, но он требует огромного ресурса и времени и его бесполезности. Мой вопрос: Как я могу обработать исключение нулевого указателя таким образом, чтобы определенный метод занимал меньше времени для выполнения?
Я отлаживал свой метод. Вот информация о трех используемых объектах:
collection: ArrayList<E> id=17
elementData Object[6246] (id=37)
node: Customer id=23
customerArray null
customerName "9379090484" (id=1345)
type null
network: DirectedSparseGraph<V,E> id=27
edge_type EdgeType (id=39)
edges HashMap<K,V> (id=42)
vertices HashMap<K,V> (id=47)
entrySet HashMap$EntrySet (id=1349)
hashSeed -949367244
keySet HashMap$KeySet (id=48)
loadFactor 0.75
modCount 64780
size 64780
table HashMap$Entry<K,V>[131072] (id=52)
threshold 98304
useAltHashing false
values null
Как вы можете видеть, ни один из указанных объектов не имеет значения! Так что могло бы вызвать NPE ?!
Почему он выбрасывает исключение null-указателя? что получает нуль? – engma
Ваш первый подход выглядит как лучший, и вы не объяснили детали NPE, которые вы получаете. Поле 'network'' null '? Как выглядит метод 'isSuccessor'? Кто-то передал коллекцию «null» или одну с «нулевой» записью? (Кроме того, когда вы пишете метод, вы должны быть гибкими в том, что вы принимаете. Конечно, вы можете взять любой «Список», а «Коллекция », вероятно, прекрасна.) –
chrylis
Прежде всего, когда вы получаете NPE, трассировка исключений скажет вам, где именно. Может быть, вы должны сказать нам. Во-вторых, возможно, вы должны отлаживать вещь, чтобы выяснить, какой указатель имеет значение null. –