web-dev-qa-db-fra.com

Java impression d'un tableau d'objets

Je sais qu'il y a beaucoup de pages sur cette question, mais je ne peux pas la comprendre dans mon cas.

J'ai besoin d'imprimer le tableau d'objets. Par exemple, j'ai un tableau d'objets qui contiennent des objets de la classe "forme". Dois-je appeler la méthode toString pour chaque objet du tableau ou coder la méthode toString dans ObjectList pour imprimer les variables d'instance? Si oui, comment dois-je procéder?

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
}

Je souhaite qu'il imprime ceci:

square has 4 sides
hexagon has 6 sides
10
user4192303

La façon la plus simple de le faire est d'utiliser Arrays.toString:

Arrays.toString(myArray);

Cela appellera en interne la méthode toString de chaque élément de votre tableau.

Il suffit donc de remplacer la méthode toString dans votre classe Shape et cela devrait fonctionner correctement.

Pour ajouter plus, remplacez la méthode toString dans votre classe où vous appelez Arrays.toString sur votre variable list:

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

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

Vous pouvez le faire avec du code ci-dessous, faites une boucle dans la méthode toString pour imprimer chaque objet de forme.

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);
    }
}
5
niks

Écrivez une instruction for-each dans toString () de la liste d'objets et créez une grande chaîne avec des caractères "\ n" et renvoyez-la sous forme de chaîne. Ou peut être le nom displayListElement () sera sémantiquement plus correct dans lequel vous pouvez simplement imprimer tous les objets de la liste.

2
LuvElDuderino

En effet, vous devez appeler la méthode toString pour chacun des objets que vous souhaitez imprimer et les joindre ensemble. Vous pouvez utiliser StringBuilder pour maintenir la chaîne en cours comme suit:

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

    return result.toString();
}

Notez que vous devez augmenter numElements (par exemple numElements++) pour chaque add opération comme ce que pbabcdefp a dit dans les commentaires. De plus, vous pouvez utiliser la classe ArrayList pour gérer les "tableaux en croissance".

0
tkokasih