toString方法调用void方法

时间:2014-04-04 15:24:14

标签: java list tostring

嘿伙计们,我正在研究一个程序,我遇到了一个奇怪的问题,希望这是一个简单的解决方案。所以我给出了一个程序的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'类型。

7 个答案:

答案 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());
}

注意:您也可以StringBuildertoString中构建字符串,这会更有效。

答案 6 :(得分:0)

    System.out.print(print())

此语句调用您在代码中定义的方法。代码中返回的方法类型为void,表示我不会返回任何内容,而PrintStream类下的print方法接受参数,该参数可以在转为解析为String。

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

相关问题