我在我的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());
原因是什么,在[,]如何消除逗号?
谢谢
答案 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 ==。