2017-02-13 18 views
-4

Мне сложно узнать, как написать мой метод toString, чтобы получить результат каждого из моих медведей в моей программе. Я хочу, чтобы на выходе отображались «Race-Points - TotalPoints». Но не может справиться с этим, несмотря на то, что остальная часть кода, похоже, компилируется.Как написать метод toString для ArrayList?

Нужно ли иметь 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

Конечно, я понимаю, что мой тостер совершенно пуст в тот момент, когда я просто не понимаю, что я должен положить туда, чтобы получить правильный результат. Я просто поставил toStringmethod там, чтобы показать, куда я должен был идти. (но я полный новичок) – wilhelmeriksson

ответ

0

Как вам сказали, просто переопределите метод toString. Для производительности используйте StringBuilder, а не конкатенацию String.

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+")"; 

Затем в ToString из BearCollection, просто написать для каждого цикла в toString пройти и вызвать toString на каждом носителе в коллекции, распечатав их.