Я создаю файл целых чисел, который считывается в сканер. Сканер создает LinkedList of Job, каждый из которых содержит 5 значений типа int. Эти работы затем сортируются с помощью MergeSort и планируются. Результирующее расписание вернет только одно значение, даже если в файле есть сотни.
Я определил, что Iterable и Mergesort работают правильно. Ошибка где-то в создании LinkedList.
Мой код до области ошибки отображается ниже:
public JobSchedule makeSchedule(JobSchedule.Metric metric, Job.JobOrdering ordering){
Scanner s = new Scanner(file);
SortableLinkedList<Job> sortable = new SortableLinkedList<Job>();
LLNode<Job> listptr = sortable.getHead();
//reads the contents of file into a storage array and...
// ...inputs the stored values as parameters for Job constructors
while(s.hasNext()){
int[] ints = new int[5];
for(int i = 0; i<5; i++){
ints[i]=s.nextInt();
}
Я проверил, что он правильно устанавливает голову:
if(sortable.getHead()==null){
sortable.setHead(new LLNode<Job>(new Job(ints[0],ints[1],
ints[2],ints[3],ints[4]),null));
sortable.getHead().getElement().setOrdering(ordering);
listptr = sortable.getHead();
}
Я думаю, что здесь происходит сбой программы:
else{
listptr.setNext(new LLNode<Job>(new Job(ints[0],ints[1],
ints[2],ints[3],ints[4]),null));
listptr = listptr.getNext();
}
}
хотя в моем тестировании ошибок (помещенном в вышеупомянутом блоке else):
System.out.println("Next:"+ints[0]+" "+ints[1]+" "+ints[2]+" "+ints[3]+" "+ints[4]);
Он успешно печатается при каждой итерации.
Есть мысли?
пс. Код LLNode и LinkedList:
public class LLNode<T>{
private T element;
private LLNode<T> next;
public LLNode(T element, LLNode<T> next){
this.element = element;
this.next = next;
}
public T getElement(){
return this.element;
}
public LLNode<T> getNext(){
return this.next;
}
public void setNext(LLNode<T> node){
this.next=node;
}
}
public class LinkedList<T>{
private LLNode<T> head;
public LinkedList(){
head = null;
}
public LinkedList(LLNode<T> head){
this.head = head;
}
public LLNode<T> getHead(){
return head;
}
public void setHead(LLNode<T> node){
this.head = node;
}
}