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
класс для управления "растущими массивами".