Мучаюсь с этой дрянью уже кучу времени - не могу понять как исправить. Мне нужно удалить из второго узла все ячейки в узле которые делиться на любую из ячеек первого узла. Например 2 узла:
t - | (25)-->(4)-->(10)-->(2)-->null |
t1 - | (72)-->(100)-->(53)-->(15)-->(16)-->(40)-->(33)-->(101)-->(20)-->(4)-->null|
Этот код который якобы работает с этим примером, но на любых других примерах нет.
public static Node <Integer> deleteMult (Node <Integer> t, Node <Integer> t1)
{
Node <Integer> p = t1;
Node <Integer> temp = t;
while(p != null){
temp = t;
while(temp != null){
if (p.getValue()%temp.getValue() == 0)
delete (t1, find(t1, p.getValue()));
temp = temp.getNext();
}
p = p.getNext();
}
return t1;
}
Вспомогательные методы:
public static void print (Node <Integer> n1)
{
Node <Integer> p = n1;
System.out.print("| ");
while (p != null)
{
System.out.print("(" + p.getValue() + ")" + "-->");
p = p.getNext();
}
System.out.println("null |");
}
public static void deleteFirst (Node <Integer> n1) // удалить первую ячейку
{
Node <Integer> p = n1;
Node <Integer> oneless = n1.getNext();
while (oneless != null){
p.setValue(oneless.getValue());
oneless = oneless.getNext();
p = p.getNext();
}
p = n1;
while(p.getNext().hasNext())
p = p.getNext();
p.setNext(null);
}
public static void delete (Node <Integer> n1, Node <Integer> that) //удалить
ячейку
{
Node <Integer> p = n1;
if (that == null)
return;
if(count(p) == 1)
return;
if (that == n1){
deleteFirst(n1);
return;
}
while (p.getNext() != that)
p = p.getNext();
p.setNext(that.getNext());
}
public static Node <Integer> find (Node <Integer> n1, int x) //найти ячейку
{
Node <Integer> p = n1;
while (p != null){
if (p.getValue() == x)
return p;
p = p.getNext();
}
return p;
}
public static int count (Node <Integer> n1) //кол-во ячеек
{
Node <Integer> p = n1;
int count = 0;
while (p != null)
{
count++;
p = p.getNext();
}
return count;
}
В общем я якобы понимаю проблему, но решить её не могу. Уповаю на стаковерфлововских гениев. Заранее спасибо.
while (p.getNext() != that)
p = p.getNext();
Вы сравниваете объекты, их надо сравнивать через equals
Строка ошибки - вспомогательный метод delete, строка
while (p.getNext().equals(that))
java.lang.NullPointerException
at Alex_Shvachko_Node_16_11_2017.delete(Alex_Shvachko_Node_16_11_2017.java:123)
at Alex_Shvachko_Node_16_11_2017.deleteMult(Alex_Shvachko_Node_16_11_2017.java:65)
at Alex_Shvachko_Node_16_11_2017.main(Alex_Shvachko_Node_16_11_2017.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Приложение должно иметь возможность послать SMS на определенный номер
Есть интерфейс Animal и 2 класса реализующих этот интерфейс : Dog и Cat