Не все данные читаются в двухсторонний двусвязный список, но все считываются в два других - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть три двухсторонних двусвязных списка. Сохранение по порядку имен, фамилий и идентификационных номеров для навигации по структуре данных. Списки имен и идентификационных номеров хорошо заполняются всеми необходимыми данными, но не все входит в список фамилий. Я уже попробовал пару вещей. Я переместился на несколько приращений переменных, думая, что это проблема, а также подумал, что это был мой метод checkFor, но я не верю, что это так. Ниже приведены данные и код, который, я считаю, имеет отношение к проблеме. Мои текущие результаты содержат список имен и список идентификаторов, содержащий все необходимые данные (дублирующиеся идентификационные номера удаляются), в то время как список фамилий составляет от половины до трети размера.

//The data, this in a file read Lname , Fname , ID
Dunn Sean 31111
Duong Geoffrey 29922
Fazekas Nicholas 31100
Prezioso Stefano 22223
Puvvada Mohana 11224
Ravikumar Rakhi 11226
Salyers Matthew 11227   
Gillespie William 49587
Hess Caleb 29282  
Armatis Jared 34512     
Beckman Allan 35176
Wang Zhen 22113
Wingett Jordan 12345 
Belt Keith 34987
Bixler Tyler 22234
Chambers Quentin 22567
Chinni Adithya 28456
Donheiser Michael 28456
Kondrashov Mikhail 33331
Kraus Laura 33332
Krupp Phillip 49888
Maass John 44112
McCarty Amanda 44223
Moldovan Gregory 44335
Oshiyoye Adekunle 44556 
Pagalos Frank 33112
Perski Zackery 33221 
Saunders Jordan 77556   
Simpson Ashlynne 77665  
Szalai Kyle 33112 
Witting Robert 21354 

 Database d=new Database();  
    //Data Reading:
    Scanner inputStream;
    try {
        inputStream = new Scanner(new FileInputStream("Data"));
        while(inputStream.hasNextLine())
        {
            String line = inputStream.nextLine();
            String[] temp = line.split(" ");
            //Constructor for DataBaseRec is Fname , Lname , ID
            DataBaseRec begin = new DataBaseRec(temp[1] , temp[0] , temp[2]);
            d.intialAdd(begin);
        }
    } catch (FileNotFoundException e) {
        e.getMessage()
    }



// The initial add method used with data reading to insert where needed
public void intialAdd(DataBaseRec student)
{
    if(nextDBRec == 0)
    {
        data[nextDBRec] = student;
        Node Ftemp = new Node(student.getFName() , nextDBRec);
        Node Ltemp = new Node(student.getLName() , nextDBRec);
        Node Itemp = new Node(student.getID() , nextDBRec);
        FnameRecs.insert(Ftemp);
        LnameRecs.insert(Ltemp);
        IDRecs.insert(Itemp);
    }
    else 
    {
        if(IDRecs.checkFor(student.getID()) == 1)
            return;
        else
        {
            data[nextDBRec] = student;
            Node Ftemp = new Node(student.getFName() , nextDBRec);
            Node Ltemp = new Node(student.getLName() , nextDBRec);
            Node Itemp = new Node(student.getID() , nextDBRec);
            LnameRecs.insert(Ltemp);
            FnameRecs.insert(Ftemp);
            IDRecs.insert(Itemp);

        }
    }
    nextDBRec++;
}


// The check for method
public int checkFor(String key)
{
    Node rover;
    rover = front;
    int retVal = 0;

    while(rover != null)
    {
        if(rover.getKey().equals(key))
        {
            retVal = 1;
            break;
        }
        rover = rover.getNext();
    }
    return retVal;
}

// My insert method this inserts the nodes into the lists
public void insert(Node newNode)
{
    Node rover;
    rover = front;
    if(front == null)
    {
        front = newNode;
        if(back == null)
            back = newNode;
    }
    else if(front == back)
    {
        if(rover.getKey().compareTo(newNode.getKey()) >= 0)
        {
            newNode.setNext(rover);
            rover.setPrev(newNode);
            front = newNode;
        }
        return;
    }
    else
    {
        while(rover != null)
        {
            if(rover.getKey().compareTo(newNode.getKey()) >= 0) break;
                rover = rover.getNext();
        }
        if(rover == null)
        {
            newNode.setPrev(back);
            back.setNext(newNode);
            back = newNode;
        }
        else if(rover.getPrev() != null)
        {
            newNode.setPrev(rover.getPrev());
            newNode.getPrev().setNext(newNode);
            newNode.setNext(rover);
            rover.setPrev(newNode);
        }
        else
        {
            newNode.setNext(rover);
            rover.setPrev(newNode);
            front = newNode;
        }
    }
}

Я считаю, что это весь соответствующий код, если кто-то знает, что я делаю неправильно, я был бы признателен за помощь. Если мне нужно предоставить больше кода, я могу это сделать. Также все сравниваемые имена выполняются в строчной форме. Строки узла в нижнем регистре.

1 Ответ

0 голосов
/ 04 ноября 2018

Я решил это! В методе вставки мой код был неправильным, если front == back вернул true. Если новые данные должны были идти раньше и становиться новым фронтом, они просто возвращались. Где был оператор return, мне был нужен код, который был внутри оператора if с использованием сравнения с. И внутри этого оператора if мне нужен был код для вставки в конец списка.

...