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
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);
}
}
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);
}
}
É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.
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".