2017-02-13 47 views
-4

我很難找到如何編寫我的toString方法來獲取我的程序中每個熊的輸出。我希望輸出顯示「Race - Points - TotalPoints」。但是即使代碼的其他部分似乎編譯了,也無法做到正確。如何爲ArrayList編寫toString方法?

我是否需要在兩個類中定義toString或缺少什麼?我檢查了幾個其他類似的問題,這似乎是一個替代方案?但是如何最有效地實施?

首先熊類:

import java.util.ArrayList; 

public class Bear { 

    public static void main(String[] args) { 

     Bear b = new Bear("Sebastian", 100, "Brownbear"); 
     ArrayList <Bear> bears = new ArrayList<Bear>(); 
     bears.add(b); 

    } 

    private String name; 
    private int points; 
    private String race; 


    public Bear(String name, int points, String race) { 
     this.name = name; 
     this.points = points; 
     this.race = race; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getRace() { 
     return race; 
    } 

    public void setRace(String race) { 
     this.race = race; 
    } 

    public int getInitialPoints() { 
     return points; 
    } 

    public int getPoints() { 
     int oldPoints = points; 
     points /= 2; 
     return oldPoints; 
    } 
} 

其次,BearCollection類:

import java.util.ArrayList; 

public class BearCollection { 

    ArrayList <Bear> bears = new ArrayList<Bear>(); 

    int totalPoints = 0; 

    public void add (Bear b) { 

     for (Bear inCollection : bears) { 
      if(b.getName().equals(inCollection.getName())) { 
       return; 
      } 
     } 

     for (Bear inCollection : bears) 
     if (b.getRace().equals(inCollection.getRace())) { 

      for(int i = bears.size(); i > 0; i --) { 
       if(bears.get(i).getRace().equals(b.getRace())) { 
        b.getPoints(); 
        i = 0; 
       } 
      } 
     } 

     totalPoints += b.getInitialPoints(); 


     bears.add(b) ; 
    } 

public String toString(){ 

    return ; 
} 
+0

看看這個http://stackoverflow.com/questions/18129505/how-can-i-override-the-tostring-method-of-an-arraylist-in-java – freedev

+2

在所有應有的尊重,你'不是嚴肅地告訴我們你有'退貨'問題,是嗎? –

+0

當然,我明白我的tostring是完全空白的,我只是不明白我應該在那裏得到正確的輸出。我只是把toString方法放在那裏,以顯示我應該去的地方。 (但我是一個完整的初學者) – wilhelmeriksson

回答

0

正如您所知,只需重寫toString方法即可。性能使用StringBuilder,而不是字符串連接。

import java.util.*; 

public class ans{ 
    public static void main(String[] args){ 
    Bears bears = new Bears(); 
    bears.add(new Bear()); 
    bears.add(new Bear()); 
    bears.add(new Bear()); 

    System.out.println(bears); 
    } 
} 

class Bear{ 
    public String toString(){ 
    return "I am a bear"; 
    } 
} 

class Bears{ 
    private ArrayList<Bear> bears = new ArrayList<Bear>(); 

    public void add(Bear bear){ 
    bears.add(bear); 
    } 

    public String toString(){ 
    StringBuilder str = new StringBuilder(); 
    if(!bears.isEmpty()){ // If there is no bears, return empty string 
     str.append(bears.get(0)); // Append the first one 
     for(int index = 1; index < bears.size(); index++){ // For all others 
     str.append(" - "); // Append a separator and the bear string 
     str.append(bears.get(index)); 
     } 

    } 
    return str.toString(); 
    } 
} 

編輯要打印的A-B-C-d,只是每一個項目與隔板,只是一個相關聯。 A(-B)( - C)( - D)或(A - )(B - )(C-)D。您可以輕鬆添加開始和結束標記。

+0

謝謝你的幫助和你的時間! – wilhelmeriksson

0

覆蓋在熊類中的toString會解決這個問題。

0

如果您需要打印出熊的整個集合,你需要給熊一個toString,是這樣的:

return "Bear("+name+","+points+","+race+")"; 

然後,在BearCollection的的toString,只寫了每個循環在toString中通過並在集合中的每個熊上調用toString,將它們打印出來。