Node в java - как решить проблему с кодом

245
18 ноября 2017, 10:09

Мучаюсь с этой дрянью уже кучу времени - не могу понять как исправить. Мне нужно удалить из второго узла все ячейки в узле которые делиться на любую из ячеек первого узла. Например 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;
}

В общем я якобы понимаю проблему, но решить её не могу. Уповаю на стаковерфлововских гениев. Заранее спасибо.

Answer 1
while (p.getNext() != that)
  p = p.getNext();

Вы сравниваете объекты, их надо сравнивать через equals

Answer 2

Строка ошибки - вспомогательный метод 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)
READ ALSO
Как послать SMS на определенный номер?

Как послать SMS на определенный номер?

Приложение должно иметь возможность послать SMS на определенный номер

285
Параметризированный метод для Class&lt;T&gt;

Параметризированный метод для Class<T>

Есть интерфейс Animal и 2 класса реализующих этот интерфейс : Dog и Cat

251
Вектор пар в Java

Вектор пар в Java

Как создать вектор пар?

302