链表的返回类型错误toUppercase方法

时间:2013-11-21 22:45:22

标签: java string linked-list return-type toupper

我有一个名为LString(一个链表类)的类,它与我的其他Node类一起使用。我编写了一个toUppercase()方法来遍历字符序列并将小写转换为大写。

我的问题是返回类型,这是我编码时遇到的一个问题。我不确定如何返回所需的LString类型,因为即使我键入return LString,它也会将其识别为变量并给出相同的不兼容类型错误。

这是明确的错误:

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

如何在我的方法中返回此必需类型的LString?

我是Java的新手,掌握返回类型对我来说似乎很麻烦。如果我发布全班,请告诉我。如果我的问题有点不清楚,请告诉我,我想在这个论坛上与用户简明扼要。

这里要求的是更多我的代码,它指定了我在两个类中做出的声明。

我的节点类:

      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 个答案:

答案 0 :(得分:1)

要返回所需的LString,请执行以下操作:

return this;

因为LString是包含链表的第一个节点的类,所以修改列表的所有方法都应该只返回它。另请注意,此行在构造函数中无效,您可以将其删除:

Node LString = new Node();

答案 1 :(得分:1)

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实例,因此确实无需返回任何内容。