web-dev-qa-db-ja.com

Javaオブジェクトの配列を出力する

この質問については多くのページがあることは知っていますが、私の場合は理解できません。

オブジェクトの配列を出力する必要があります。たとえば、「シェイプ」クラスのオブジェクトを保持するオブジェクトの配列があります。配列内のオブジェクトごとに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
10
user4192303

これを行う最も簡単な方法は、Arrays.toStringを使用することです。

Arrays.toString(myArray);

これにより、配列のすべての要素のtoStringメソッドが内部的に呼び出されます。

したがって、toStringクラスのShapeメソッドをオーバーライドするだけで、正常に動作するはずです。

さらに追加するには、変数toStringArrays.toStringを呼び出すクラスのlistメソッドをオーバーライドします。

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

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

これを行うには、次のコードを使用し、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);
    }
}
5
niks

オブジェクトリストのtoString()にfor-eachステートメントを記述し、「\ n」文字を含む大きな文字列を作成し、それをStringとして返します。または名前かもしれませんdisplayListElement()は意味的にもっと正確になり、リスト内のすべてのオブジェクトを簡単に印刷できます。

2
LuvElDuderino

実際、印刷するオブジェクトごとに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クラスを使用して、「成長する配列」を管理できます。

0
tkokasih