linkList的toString方法

时间:2017-03-08 16:22:23

标签: java junit linked-list tostring

我在我的linkList类中获取了toString的奇怪输出。

我不能使用任何方法,只能使用String concat。因此如何处理这个问题受到限制。

以下是代码:

NSString * str = [[NSString alloc] initWithString:@"Hello world"];
// surprise: you may get an _NSContiguousString instead

我写了一个JUnit测试:

public class Stack<T> : ExpressibleByArrayLiteral {
    private var buffer: [T]

    init() {
        self.buffer = []
    }

    public func push(_ value: T) {
        self.buffer.append(value)
    } 

    public func pop() -> T? {
        return self.buffer.popLast()
    }

    var size: Int {
        return self.buffer.count
    }

    var isEmpty: Bool {
        return self.size == 0
    }

    // MARK: -
    required public init(arrayLiteral: T...) {
        self.buffer = []
        for item in arrayLiteral {
            self.push(item)
        }
    }
}

并且noOrderList()。toString()来自:

@Override
public String toString() {
if (head == null) {
return "";
}
String result = "";
Node curr = head;

while (curr.next != null) {
curr = curr.next;
result += curr.data + ", ";
}
return result;
}

当我运行测试时,我得到:

assetsEquals(
"8,6,7,5,3,0,9, " + "9,0,3,5,7,6,8", dataTest.noOrderList().toString());

原因是什么,在[,]如何消除逗号?

谢谢

3 个答案:

答案 0 :(得分:2)

您始终将", "字符串附加到结果。

  • 因此,对于第一个元素,您追加"9, "
  • 对于第二个,它是"0, "
  • 等......
  • 最后,您为最后一个添加"3, "

相反,只有当下一个元素不是", "时,才应附加null

E.g:

while (curr.next != null) {
curr = curr.next;
    result += curr.data;
    if (curr.next != null)
        result += ", ";
}

要保存一些比较,你应该在元素之前发出", ",并在循环之前发出第一个元素:

//don't print head, since that seems to be empty in your implementation.
//also make sure head does not reference `null` by accident...
if (curr.next == null)
    return result;
curr = curr.next;

//1st element after `head`
result += curr.data;

while (curr.next != null) {
    curr = curr.next;
    result += ", " + curr.data;
}

我还注意到你从未将head元素放入结果中。它是空的,还是那个错误?

答案 1 :(得分:1)

你的覆盖行为有这个循环

while (curr.next != null) { curr = curr.next; result += curr.data + ", "; }

当你到达它的末尾时,无论是否有另一个curr.next,你总是添加一个逗号

如果你可以在循环之后只删除子串,如果没有,你必须在添加逗号之前再次检查curr.next!= null或者开始将第一个字符串追加到循环之外并且在内部开始连接逗号

答案 2 :(得分:0)

在你的While循环中,我们进入最后一次迭代,其中curr.next!= null,我们仍然附加一个“,”。

您可以在附加逗号之前检查curr.next.next ==。