Связанный список с переменными, тип которых не предопределен - PullRequest
0 голосов
/ 14 сентября 2018

В моем связанном списке используются переменные, которые не определены заранее, но я научился использовать их только сегодня. Я настроил список на использование простых целых чисел, но я понимаю, что не могу сравнивать свои переменные одинаково, потому что они не определены как целые числа, поэтому я получаю синтаксическую ошибку в моих операторах if, которые пытаются сравнить целочисленные значения из узлов связанного списка, чтобы найти самый большой и самый маленький в списке.

Я пометил операторы if как ошибки. Скажите, пожалуйста, нужен ли еще какой-либо код или информация.

package lab01Pkg;

public class LinkedList <T> //<T> is defining the type of node we are creating
{
    private int size;
    private Node<T> head;
    private Node<T> tail;

    public LinkedList()
    {
        size = 0;
        head = null;
        tail = null;
    }

    public void addToFront( T theData ) //Must pass in the type of variable the list knows how to hold.
    {
        Node<T> tempNode = head;
        head = new Node<T>( theData, tempNode );
        size++;
    }

    public void addLast( T theData )
    {
        if ( isEmpty() )
        {
            addToFront(theData);
        }
        else
        {
            Node<T> tempNode = head;
            while ( tempNode.getLink() != null )
            {
                tempNode = tempNode.getLink();
            }
            Node<T> newNode = new Node<T>( theData, null );
            tempNode.setLink(newNode);
            size++;
        }
    }

    public T min()
    {
        if (size == 0)
        {
            return null;
        }
        Node<T> tempNode = head;
        T valueHold = tempNode.getData();
        while ( tempNode.getLink() != null )
        {
            **if (tempNode.getData() < valueHold)** //Error Here
            {
                valueHold = tempNode.getData();
            }
            tempNode = tempNode.getLink();
        }
        return valueHold;
    }

    public T max()
    {
        if (size == 0)
        {
            return null;
        }
        Node<T> tempNode = head;
        T valueHold = tempNode.getData();
        while ( tempNode.getLink() != null )
        {
            **if (tempNode.getData() > valueHold)** //Error here
            {
                valueHold = tempNode.getData();
            }
            tempNode = tempNode.getLink();
        }
        return valueHold;
    }

    public void removeLast()
    {
        Node<T> tempNode = head;
        while (tempNode.getLink() != null)
        {
            tempNode = tempNode.getLink();
        }
        tempNode = null;
    }

    public boolean isEmpty() //Returns true or false based on if list is empty or not.
    {
        return size == 0;
    }

    public String toString()
    {
        Node<T> tempNode = head;
        String theResult = "";
        while ( tempNode != null)
        {
            theResult = theResult + tempNode.getData().toString();
            tempNode = tempNode.getLink();
        }
        return theResult;
    }

}

1 Ответ

0 голосов
/ 14 сентября 2018

Чтобы достичь того, что вы хотите, вам нужно использовать интерфейс Comparable. Прочитайте эту статью , чтобы получить представление об интерфейсе Comparable.

Затем вам нужно сделать определение класса, чтобы иметь универсальный тип, который реализует интерфейс Comparable.

public class LinkedList <T extends Comparable<T>> { ... 

И вам нужно убедиться, что объекты, которые вы планируете добавить в этот список, реализуют интерфейс Comparable. Обычно встроенные классы Java, такие как Integer, Long, реализовали это. Если вы используете пользовательские объекты, убедитесь, что вы реализуете этот интерфейс в этих классах.

Тогда вместо отметок < и > используйте метод compareTo в условиях if. Например:

if (tempNode.getData().compareTo(valueHold) > 0) // tempNode is larger

Я только что обрисовал, что вам нужно сделать. Надеюсь, у вас есть идея. Прочитайте это для дальнейшего чтения Comparable использования с Generics.

...