将链表的类型错误返回到Uppercase方法



我有一个名为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('',null);  //'' 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;
   }
}

如果我需要提供更多信息,请告诉我。

要返回所需的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实例,因此实际上不需要返回任何内容。

相关内容

  • 没有找到相关文章

最新更新