嘿伙计们,我正在研究一个程序,我遇到了一个奇怪的问题,希望这是一个简单的解决方案。所以我给出了一个程序的shell代码,用于创建和打印整数的链接列表。它有print()方法来格式化打印输出。然后我被要求创建一个toString方法,该方法返回一个包含列表打印值的String。这是我的代码:
public void print()
{
System.out.println("--------------------");
System.out.print("List elements: ");
IntNode temp = front;
while (temp != null)
{
System.out.print(temp.val + " ");
temp = temp.next;
}
System.out.println("\n-----------------------\n");
}
public String toString()
{
String result;
result += System.out.print(print());
return result;
}
正如您所料,我从编译器中得到错误,此处不允许使用'void'类型。
答案 0 :(得分:1)
问题基本上是您希望/需要来自String
方法的print
。您目前的设计是:
print
:使用我想要/需要的不同String
打印此类实例。toString
:尝试使用String
中生成的print
。可以注意到,这是设计问题。实现应该是相反的:toString
方法生成对象引用的所需String
形式,print
方法只打印toString
的结果。
因此,只需使用toString
方法调整代码即可完成您想要/需要的代码:
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("--------------------");
sb.append('\n');
sb.append("List elements: ");
while (temp != null) {
sb.append(temp.val);
sb.append(" ");
temp = temp.next;
}
sb.append("\n-----------------------\n");
return sb.toString();
}
public void print() {
System.out.println(toString());
}
答案 1 :(得分:0)
你在做一些奇怪的事情:
result += System.out.print(print());
您的方法print()
不返回值,只是将所有内容打印到控制台。您可能需要修改print
以返回String值。
更好的是,您需要制作一个基于当前toString()
方法代码的正确print
方法,并在toString()
中使用print
。
答案 2 :(得分:0)
您正在将系统输出与字符串混合。这不是我个人写的方式,但它似乎就是你所追求的。
public String getAsString()
{
String output = new String();
output += "--------------------\n";
output += "List elements: \n";
IntNode temp = front;
while (temp != null)
{
output += (temp.val + " \n");
temp = temp.next;
}
output += "\n-----------------------\n");
return output;
}
public String toString()
{
return getAsString;
}
答案 3 :(得分:0)
result += System.out.print(print());
是有问题的一行。您无法将控制台打印分配给变量。
相反,在整个程序中使用字符串变量并将最终结果打印到控制台。
答案 4 :(得分:0)
我认为你想要的是这样的。注意我使用的stringbuilder比许多字符串con-cat要好。
我从你的代码中做了很多假设......但是你很可能试图做这样的事情。
public String print(){
StringBuilder result = new StringBuilder();
result.append("--------------------\n");
result.append("List elements: ");
IntNode temp = front;
while (temp != null)
{
result.append(temp.val);
result.append(" ");
temp = temp.next;
}
result.append("\n-----------------------\n");
return result.toString()
}
public String toString()
{
return print();
}
答案 5 :(得分:0)
我不知道System.out.print
返回什么,但我确定将其返回值附加到字符串不是你想要的方式。
我会使print()
方法使用toString
来构建格式化字符串:
public String toString() {
String output = "--------------------\n";
output += "List elements: ";
IntNode temp = front;
while (temp != null) {
output += temp.val + " ";
temp = temp.next;
}
output += "\n-----------------------\n";
return output;
}
public void print() {
System.out.print(toString());
}
注意:您也可以StringBuilder
在toString
中构建字符串,这会更有效。
答案 6 :(得分:0)
System.out.print(print())
此语句调用您在代码中定义的方法。代码中返回的方法类型为void,表示我不会返回任何内容,而PrintStream
类下的print方法接受参数,该参数可以在转为解析为String。
返回一些值,然后尝试打印