我有一个名为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;
}
}
如果我需要提供更多信息,请告诉我。
答案 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
实例,因此确实无需返回任何内容。