编辑:如果您想尝试一下,我已经将完整的类文件和测试器文件上载到了保管箱:https://www.dropbox.com/sh/03qsecq3bd55w78/AAA_PT_BczNGl7cTZO_Zf_qUa?dl=0

首先,很抱歉,如果这是一个非常简单的问题-我才刚刚开始使用Java,并且我没有太多的编程经验。

所以我有两节课:Posada和Camino。 Posada包含Camino对象的列表。我需要重写Posada的toString方法,以便它返回一个包含列表中包含的Camino对象的所有toString方法的字符串,如下所示:

波萨达:

public class Posada {

    /*other attributes*/
    private List<Camino> listCaminos;

    /*Getters*/
    public List<Camino> getLisaCaminos() {
        return listCaminos;
    }

    /*Builder*/
    public Posada(String nombre, int engRecuperada) {
        /*Other attributes*/
        this.listaCaminos = new ArrayList<Camino>();
    }

    /*Methods*/
    public String getStringToReturn(){
        String[] arrayCaminos = listCaminos.toArray(new
        String[listCaminos.size()]);

        String string = "";
        string += /*Some other attributes that go before the Camino objects
        and work fine*/;

        for(int i = 0; i < listCaminos.size(); i++) {
            string += ", " + arrayCaminos[i];
        }

        return string;
    }

    /*toString*/
    @Override
    public String toString() {
        return getStringToReturn(); //failure
    }

}


卡米诺

public class Camino {

    /*Attributes*/
    private Posada origin;
    private Posada destination;
    private int cost;

    private static int costTotal;

    /*Contructor*/
    public Camino(Posada origin, Posada destination, int cost){
        this.origin = origin;
        this.destination = destination;
        this.cost = cost;
        Camino.costTotal = Camino.costTotal + cost;

    }

    /*Getters*/
    public int getCost() {
        return cost;
    }

    public Posada getDestination() {
        return destination;
    }

    public Posada getOrigin() {
        return origin;
    }

    /*Methods. Irrelevant*/


    /*toString*/
    @Override
    public String toString() {
        return "(" + getOrigin() + "--" + getCost() + "-->" +
        getDestination()+ ")";
    }

}


因此,在打印Posada时的预期结果应该是“ Other_attributes,(originCamino1--costCamino1-> destinationCamino1),(originCamino2--costCamino2-> destinationCamino2),(..),(originCaminoN--costCaminoN-> destinationCaminoN)。 )”,N是列表中Camino对象的总数。但是,我不断收到以下错误:

Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.ArrayList.toArray(Unknown Source)
at apartado1.Posada.getStringToReturn(Posada.java:106)
at apartado1.Posada.toString(Posada.java:121)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)


我知道它确实必须很容易修复,但是我一直在寻找,而且无论做什么我都无法使用。我试过使用toString()和toArray(),但得到的结果相同。希望您能帮助我。提前致谢!

最佳答案

为什么ArrayList的默认实现不起作用?这个:

@Override
public String toString() {
    return listCaminos.toString();
}

10-08 19:32