Java печать массива объектов

Я знаю, что есть много страниц об этом вопрос, но я не могу понять, это в моем случае.

мне нужно распечатать массив объектов. Например, у меня есть массив объектов, которые содержат объекты "форма" класса. Должен ли я вызывать метод toString для каждого объекта в массиве или кодировать метод toString в ObjectList для печати переменных экземпляра? Если да, то как мне это сделать?

public class Shape{
    private String shapeName;
    private int numSides;

    public String toString(){
        return shapeName + " has " + numSides + " sides.";
    }
}

public class ObjectList{
    private Object[] list = new Object[10];
    private int numElement = 0;

    public void add(Object next){
        list[numElement] = next;
    }

    public String toString(){
        // prints out the array of objects 

        // do I call the toString() method from the object?

        // or do I print the instance variables? What am I printing?

        // I'm guessing I do a for loop here
    }
}

public class Driver{
    public static void main(String[] args){
        ObjectList list = new ObjectList();
        Shape square = new Shape("square", 4);
        Shape hex = new Shape("hexagon", 6);
        list.add(square);
        list.toString();  // prints out array of objects
}

Я стремлюсь, чтобы он напечатал это:

square has 4 sides
hexagon has 6 sides

4 ответов


самый простой способ сделать это-использовать массивы.метод toString:

Arrays.toString(myArray);

это будет внутренне называть toString метод каждого элемента вашего массива.

поэтому просто переопределите toString метод Shape класс и он должен работать нормально.

чтобы добавить дальше, переопределите toString метод в вашем классе, где вы называете Arrays.toString на вашем переменной list :

public class ObjectList{
    private Object[] list = new Object[10];
    .............

    public String toString(){
         return Arrays.toString(list);
    }
}

вы можете сделать это с ревущим кодом, сделать цикл в методе toString для печати каждого объекта формы.

class Shape{
    private String shapeName;
    private int numSides;

    Shape(String shapeName, int numSides){
        this.shapeName = shapeName;
        this.numSides = numSides;
    }
    public String toString(){
        return shapeName + " has " + numSides + " sides.";
    }
}

class ObjectList{
    private Object[] list = new Object[10];
    private int numElement = 0;

    public void add(Object next){
        list[numElement] = next;
        numElement++;
    }

    @Override
    public String toString(){
        String str="";
        int i=0;
        while(list[i] != null){
            str += list[i]+"\n";
            i++;
        }
        return str;
    }
}

public class Driver{
    public static void main(String[] args){
        ObjectList list = new ObjectList();
        Shape square = new Shape("square", 4);
        Shape hex = new Shape("hexagon", 6);
        list.add(hex);
        list.add(square);
        System.out.println(list);
    }
}

напишите оператор for-each в toString () списка объектов и создайте большую строку с символами "\n " и верните ее в виде строки . Или может быть имя displayListElement() будет семантически более правильным, в котором вы можете просто распечатать все объекты в списке .


действительно, Вы должны позвонить toString метод для каждого из объектов, которые вы хотите распечатать и соединить их вместе. Вы можете использовать StringBuilder чтобы удерживать строку в процессе создания следующим образом:

public String toString() {
    StringBuilder result = new StringBuilder();
    for (int i = 0; i <= numElements; i++) {
        result.append(list.toString() + "\n");
    }

    return result.toString();
}

обратите внимание, что вам нужно увеличить numElements (например,numElements++) для каждого add операция как то, что pbabcdefp сказал в комментариях. Кроме того, вы можете использовать ArrayList класс для управления "растущими массивами".