Ошибка возврата типа связанного списка в метод верхнего регистра

У меня есть класс с именем LString (класс связанного списка), который работает с моим другим классом Node. Я написал метод toUppercase(), который пересекает последовательность символов и преобразует строчные в прописные.

Моя проблема - тип возвращаемого значения, проблема, которую я, похоже, испытываю, когда много пишу. Я не уверен, как вернуть требуемый тип LString, так как даже если я наберу return LString он распознает его как переменную и выдает те же несовместимые типы ошибок.

Вот явная ошибка:

    LString.java:134: error: incompatible types
      return current;
             ^
  required: LString
  found:    Node

Как мне вернуть этот обязательный тип LString в моем методе?

Я довольно новичок в Java, и мне было сложно разобраться в типах возвращаемых данных. Дайте мне знать, если я должен опубликовать весь мой класс. Если мой вопрос немного неясен, дайте мне знать, я хотел бы быть кратким с пользователями на этом форуме.

В соответствии с просьбой, здесь приведен мой код, который определяет объявления, которые я сделал в обоих классах.

Мой класс Node:

      public class Node{
       public char data;
       public Node next;

       //constructors from page 956
       public Node()
       {
          this('\0',null);  //'\0' is null char for java
       }

       public Node(char initialData, Node initialNext)
       {
          data = initialData;
          next = initialNext;
       }
}

И мой класс LString (только конструктор и мой метод toUppercase я перечислю):

public class LString{

   private Node front = null;  //first val in list
   private Node back;   //last val in list
   private int size = 0;
   private int i;

   public LString(){
      //construct empty list
      Node LString = new Node();
      front = null;

   }
   public LString toUppercase(){
      Node current = front;
      while(current != null){
         current.data = Character.toUpperCase(current.data);
         current = current.next;
      }
      return front;
   }
}

Если мне нужно предоставить больше информации, дайте мне знать.

2 ответа

Решение

Чтобы вернуть необходимый LString просто сделайте:

return this;

Так как LString это класс, который содержит первый узел связанного списка, и все методы, которые изменяют список, должны просто возвращать его. Также обратите внимание, что эта строка ничего не делает в конструкторе, вы можете удалить ее:

Node LString = new Node();
public LString toUppercase(){
      Node current = front;
      while(current != null){
         current.data = Character.toUpperCase(current.data);
         current = current.next;
      }
      return front;
}

front имеет тип Node, но подпись метода public LString toUppercase()Это означает, что ожидается возврат LString пример.

Подумайте о том, что вы на самом деле хотите вернуть. Вы хотите вернуть LString который содержит заглавные буквы, верно? Но это уже тот случай, с которым вы работаете! Так что вы можете либо вернуться this:

public LString toUppercase(){
      Node current = front;
      while(current != null){
         current.data = Character.toUpperCase(current.data);
         current = current.next;
      }

      return this;
}

Но в этом случае вам все еще понадобится другой метод, который печатает символы верхнего регистра:

LString lString = new LString();
...
...
lString.toUppercase(); //lString is already modified and contains uppercase characters! You
                       //don't have to "return" anything. If you returned "this" this
                       //line would be lString = lString.toUppercase(), but that's
                       //not buying you anything special.
System.out.println(lString.toString()); //Assuming you have a toString method 
                                        //that prints out the characters.

Позвонив toUppercase метод экземпляра вы уже изменили свой LString Например, нет необходимости возвращать что-либо.

Другие вопросы по тегам