2014-04-04 60 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。

返回一些值,然後嘗試打印