2014-11-14 49 views
3

如何使用toString打印對象和特定實例?如何使用toString打印對象的特定實例

所以用戶基本上都在輸入信息。基於輸入,它將保存在實例A或實例B中。實例A和B都是覆蓋toString方法的子類。所以來自用戶的輸入被保存在一個數組中。我怎樣才能讓它成爲A的實例的所有輸入都會打印?

這是我現在有的代碼,它不工作。

public static void printA(ABC[] inputs) 
    { 
     for(int i = 0; i < inputs.length; i++) 
     { 
      if(inputs[i] instanceof A) 
      { 
       JOptionPane.showMessageDialog(null, inputs.toString()); 
      } 
     } 
    } 
+0

它究竟是「* not working *」?你能編譯你的代碼嗎?你有沒有得到任何結果? –

+0

我可以編譯它我得到「LClient; @ 20d9896e」作爲輸出 – Mwam94

回答

0

你只需要的是

JOptionPane.showMessageDialog(null, inputs[i].toString()); 

,因爲你試圖告訴你想要的array.toString()不是值。

+0

這將輸出數組中的所有東西。有沒有辦法只打印出A的實例? – Mwam94

+0

可能是因爲'if(inputs [i] instanceof A)'每次都是真的。 –

0

您在迭代inputs,但測試了clients。這就是爲什麼我更喜歡使用for-each loop,我建議您使用StringBuilder來構建單個消息,然後顯示一次。喜歡的東西,

public static void printA(ABC[] inputs) { 
    StringBuilder sb = new StringBuilder(); 
    for (ABC input : inputs) { 
     if (input instanceof A) { 
      sb.append(input).append(System.lineSeparator()); 
     } 
    } 
    JOptionPane.showMessageDialog(null, sb.toString().trim()); 
} 

編輯

你得到的輸出( 「LClient; @ 20d9896e」)是因爲你顯示inputs.toString()。數組不會覆蓋toString(),您可以使用Arrays.toString(Object[])

String msg = Arrays.toString(inputs); 

但你會得到所有的陣列中的項目。另外,請確保Client覆蓋toString()

+0

除了使用StringBuilder之外,還有其他方法嗎?什麼是sb.append? – Mwam94

+0

它是['StringBuilder.append(String)'](https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#append%28java.lang.String%29)。當然,你可以使用你的'JOptionPane',但它會爲每個'A'顯示一條新消息。 –

+0

有沒有在一個JOptionPane中打印出A的所有實例? – Mwam94

相關問題