2014-04-04 56 views
0

嘿,我正在研究一个程序,我遇到了一个奇怪的问题,希望是一个简单的修复。所以我给了一个程序的shell代码来创建和打印一个整数链接列表。它有print()方法来格式化打印输出。然后我被要求创建一个toString方法,该方法返回一个包含列表打印值的String。这是我的代码:toString方法调用void方法

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

@ joey.enfield如果你读的代码,你会发现它很明确的,我想。 –

+0

..我做了..这里有这么多问题... –

+0

我希望你得到一个错误,因为你不能使用字符串连接与void。你想在那里做什么? – azurefrog

回答

0

你正在做一些奇怪的位置:

result += System.out.print(print());

你的方法print()没有返回值,只是打印一切安慰。您可能需要修改print以返回字符串值。

更妙的是,你需要做的做是基于代码从目前print方法,只是使用toString()print适当toString()方法。

+0

即使'print'返回一个字符串,它仍然会中断,因为'System.out.print()'也返回void。对于void类型,'+ ='是未定义的。 – azurefrog

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; 
} 
+0

非常感谢这么多人,我认为实验室的措辞让我很失望。 – user3267872

1

的问题基本上是你想/需要从print方法String。您目前的设计是:

  • print:使用不同的值打印此类实例String■我想要/需要。
  • toString:尝试使用print中生成的String

可以注意到,这是一个设计问题。执行应该是相反的方法: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()); 
} 
0
result += System.out.print(print()); 

是有问题的线路。您不能将控制台打印分配给变量。

而是在整个程序中使用字符串变量并将最终结果输出到控制台。

+0

OP已经知道了这一点:*正如你所期望的那样,我从编译器得到一个错误,说'void'类型不允许在这里*。 –

+0

那我真的不明白这个问题是什么?如果OP已经知道这是他的问题的原因,那么他肯定可以解决它? – Jake

+0

这是一个设计问题,正如我在答案中指出的那样。 –

0

我想你想要的是这样的。注意我使用的是比许多字符串控件更好的stringbuilder。

我从你的代码做了很多假设......但你正在尝试做这样的事情。

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(); 
} 
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,这将是更有效的。

0
System.out.print(print()) 

本声明呼吁你在方法的code.The返回类型在你的代码中定义的方法是无效的,它说我不会在PrintStream类返回任何东西和打印方法接受参数,它可以在转为被解析为String。

返回一些值,然后尝试打印