簡體   English   中英

Java打印一個對象數組

[英]Java printing an array of objects

我知道有很多關於這個問題的網頁,但在我的案例中我無法理解。

我需要打印對象數組。 例如,我有一個對象數組,用於保存“shape”類中的對象。 我是否為數組中的每個對象調用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方法。

所以只需在Shape類中覆蓋toString方法,它應該可以正常工作。

要進一步添加,請在類中重寫toString方法,在該類中調用變量list Arrays.toString

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

在Object List的toString()中編寫for-each語句,並創建一個帶有'\\ n'字符的大型String,並將其作為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();
}

請注意,您需要為每個add操作增加numElements (例如numElements++ ),就像pbabcdefp在評論中所說的那樣。 此外,您可以使用ArrayList類來管理“增長的數組”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM