我有一个名为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
实例,因此实际上不需要返回任何内容。