while (!Que.isEmpty())
{
Ttotal = Ttotal + disp;
System.out.println(Que.peekFirst().getExecSize());
Exec=Que.peekFirst().getExecSize();
output += String.format("T%d: %s\n",Ttotal,Que.peekFirst().getID());
Que.peekFirst().setTstart(Ttotal);
Ttotal = Ttotal+Exec;
Que.peekFirst().setTend(Ttotal);
Quecleared.add(Que.pollFirst());
}
Это не должно выдавать ошибку на Exec = Que.peekFirst().getExecSize();
Эта ошибка выдается, когда ваш контейнер пуст.
РЕДАКТИРОВАТЬ
В своем коде вы указали условие Que != null
.В Java, как только объект был создан, он больше не считается null
, даже если это empty
.Скорее всего, здесь происходило то, что вы продолжали повторять цикл while(Que != null)
до тех пор, пока не вызвали Que.poll()
для всех элементов списка.
После очистки списка вы не вышли из цикла, поскольку Que
все еще не было null
.Затем вызов getFirst()
для пустого экземпляра LinkedList
вызвал исключение.
Подобную ситуацию можно увидеть здесь с пустыми и пустыми строками: Разница между нулевым и пустым ("") JavaСтрока
РЕДАКТИРОВАТЬ 2
Также кажется, что ваши методы класса для getID()
, getExecSize()
и т. Д. Передают значения по ссылке, а не копируютих ценность.Таким образом, любое изменение, которое вы сделаете после передачи ссылки из очереди, изменит любые копии, которые вы пытались сделать из нее.
Этого лучше всего избежать, создав новый экземпляр объекта и вернув его из своей функции.Показано в ответе на вопрос, связанный ниже:
class Foo {
private Bar myBar;
public Foo deepCopy() {
Foo newFoo = new Foo();
newFoo.myBar = myBar.clone(); //or new Bar(myBar) or myBar.deepCopy or ...
return newFoo;
}
}
Для получения дополнительной информации о способах передачи values
в отличие от reference values
ваших ранее существовавших экземпляров, а также о том, какая на самом деле мелкая копияесть, проверьте эту ссылку: Что такое мелкая копия на Java?