この質問については多くのページがあることは知っていますが、私の場合は理解できません。
オブジェクトの配列を出力する必要があります。たとえば、「シェイプ」クラスのオブジェクトを保持するオブジェクトの配列があります。配列内のオブジェクトごとにtoStringメソッドを呼び出しますか、それともObjectListでtoStringメソッドをコーディングしてインスタンス変数を出力しますか?もしそうなら、どうすればいいですか?
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
これを行う最も簡単な方法は、Arrays.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メソッドでforループを作成して、各シェイプオブジェクトを出力します。
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);
}
}
オブジェクトリストのtoString()にfor-eachステートメントを記述し、「\ n」文字を含む大きな文字列を作成し、それをStringとして返します。または名前かもしれません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
クラスを使用して、「成長する配列」を管理できます。