java связанный список копирования конструктор и конструктор из строки - PullRequest
0 голосов
/ 15 октября 2011

У меня есть 2 вопроса о связанных списках, поэтому я решил опубликовать их в одном вопросе.

Сначала я покажу класс своего узла, а также конструктор и конструктор копирования из строки

class CharNode 
{ 

   private char letter; 
   private CharNode next; 

   public CharNode(char ch, CharNode link) 
    { 
    letter = ch;
    next = link;
   }

   public void setCharacter(char ch) 
    { 
    letter = ch;
    }

   public char getCharacter() 
    {
    return letter;
    } 

    public void setNext(CharNode next) 
    {
    this.next = next;
    } 

   public CharNode getNext() 
    {
    return next;
    } 

}  

конструктор копирования

   // copy constructor  
   public CharList(CharList l) 
{
    CharNode pt = head;

    while(pt.getNext() != null)
    {
        this.setCharacter() = l.getCharacter();
        this.setNext() = l.getNext();
    }
} 

конструктор из строки

   // constructor from a String 
   public CharList(String s) 
{ 
    head = head.setCharacter(s);


}

, когда я пытаюсь скомпилировать, я получаю ошибку для моего конструктора копирования, он говорит, что не может найти символ this.setCharacter() ... и l.setCharacter() ...

я просто делаю это совершенно неправильно?

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

любая помощь будет оценена.

Ответы [ 4 ]

1 голос
/ 15 октября 2011

в вашем конструкторе CharList, this относится к классу CharList, который не имеет метода setCharacter() (CharNode делает). также, когда вы вызываете метод в Java, вам нужно передать параметр, например, setFoo(newFoo), а не setFoo() = newFoo

0 голосов
/ 15 октября 2011

В вашем "конструкторе копирования" вам нужно будет пройти через список, передаваемый в начале, начиная с его заголовка, и создать новые узлы для вашего нового списка ...

public CharList(CharList l) 
{
    // Whatever method your CharList provides to get the 
    // first node in the list goes here
    CharNode pt = l.head(); 

    // create a new head node for *this* list
    CharNode newNode = new CharNode();
    this.head = newNode;

    // Go through old list, copy data, create new nodes 
    // for this list.
    while(pt != null)
    {
        newNode.setCharacter(pt.getCharacter());
        pt = pt.getNext();
        if (pt != null)
        {
            newNode.setNext(new CharNode());
            newNode = newNode.getNext();
        }

    }
} 

Что касается создания списка из String ... той же концепции, за исключением того, что вы перебираете строку, а не другую CharList

for (int i = 0; i < myString.length(); i++)
{ 
    ...
    newNode.setCharacter(myString.charAt(i));
    ...
0 голосов
/ 15 октября 2011

Ваш конструктор копирования предназначен для класса CharList, тогда как setCharacter определен в CharNode.

this в конструкторе копирования ссылается на текущий экземпляр объекта CharList, для которого определен конструктор. l также является CharList в вашем коде, а не CharNode, который определяет setCharacter.

Конструктор копирования должен быть определен в классе CharNode.

0 голосов
/ 15 октября 2011

Ваш метод набора символов, вероятно, находится в вашем узле, а не в вашем списке. Вы также должны двигать указатель вперед. Что я имею в виду, где вы когда-нибудь «переходите к следующему узлу»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...