首页 > 解决方案 > 使用 Arraylist 附加序列

问题描述

我遇到了这个问题:

考虑以下类:

public class MergeSequence{

private ArrayList<Integer> values;
public MergeSequence(){ values = new ArrayList<Integer>();}
public void add(int n) {values.add(n);}
public String toString() { return values.toString(); }
}

添加方法

public MergeSequence append(MergeSequence other)

创建一个新序列,附加这个和另一个序列,而不修改任何一个序列

例如,如果序列 (a) 是:1 4 9 16 并且 b 是序列 9 7 4 9 11,则调用 a.append(b) 返回序列 1 4 9 16 9 7 4 9 11 而不修改 a 或 b .

我不想要这个问题的答案,而是提示如何使用公共 MergeSequence 追加方法来做到这一点。任何建议都会有所帮助,因为我完全被难住了(我对 java 和编程很陌生)。

标签: java

解决方案


除非您可以访问 MergeSequence 对象中包含的值,否则您无法真正做到这一点。当前没有定义允许您执行此操作的方法。甚至定义的toString()方法也不起作用,因为它返回一个空字符串,这没有用。

但是,假设您可以更改源代码以使不再是private而是现在是public,您可以执行以下操作。

public class MergeSequence
{
    public ArrayList<Integer> values;  // This must be public
    public MergeSequence(){ values = new ArrayList<Integer>();}
    public void add(int n) {values.add(n);}
    public String toString() { return values.toString(); }

    public MergeSequence append(MergeSequence other)
    {
        MergeSequence result = new MergeSequence();  // Create a new result object.

        // Iterate through the "local" ArrayList and add each value to the result
        for (int i = 0; i < values.size(); i++)
        {
            int j = values.get(i);
            result.add(j);
        }

        // Now, iterate through the "external" ArrayList and add each value to the result
        for (int i = 0; i < other.values.size(); i++)
        {
            int j = other.values.get(i);
            result.add(j);
        }

        // Then return the result. Neither source ArrayList is modified.
        return result;
    }
}

推荐阅读