【发布时间】:2015-05-02 07:22:29
【问题描述】:
我正在努力在我的名为 LString 的链表类中完成这个 toString() 方法
该类创建一个 LString 对象,该对象使用链表而不是数组来模仿 String 和 StringBuilder。它从链表中创建字符串。
这是该方法的代码:
public String toString(){
StringBuilder result = new StringBuilder();
node curr = front;
while (curr != null){
result.append(curr.data);
curr = curr.next;
}
return result.toString();
}
我已经尝试了几种不同的方法,我想我已经接近解决了。但我无法从此错误消息继续前进:
Running constructor, length, toString tests (10 tests)
Starting tests: .......E.E
Time: 0.009
There were 2 failures:
1) t11aLStringOfStringToString[1](LStringTest$LStringOfStringTest)
org.junit.ComparisonFailure: LString("ab").toString() is wrong. expected:<[a]b> but was:<[]b>
at org.junit.Assert.assertEquals(Assert.java:115)
at LStringTest$LStringOfStringTest.t11aLStringOfStringToString(LStringTest.java:221)
... 10 more
2) t11aLStringOfStringToString[2](LStringTest$LStringOfStringTest)
org.junit.ComparisonFailure: LString("This is a long string.").toString() is wrong. expected:<[This is a long string].> but was:<[].>
at org.junit.Assert.assertEquals(Assert.java:115)
at LStringTest$LStringOfStringTest.t11aLStringOfStringToString(LStringTest.java:221)
... 10 more
Test Failed! (2 of 10 tests failed.)
Test failures: abandoning other phases.
LString 类使用另一个类 LStringTest.java 进行各种测试。此错误消息来自运行 LStringTest.java,但我正在处理的方法在 LString 中。它是LString("ab").toString() is wrong 位。
在某些情况下,这是我班的其余部分:
public class LString {
// 2. Fields
node front;
//node tail;
int size;
// 1. Node class
private class node {
char data;
node next;
//constructors
//1. default
public node (){
}
//2. data
public node (char newData){
this.data = newData;
}
//3. data + next
public node (char newData, node newNext){
this.data = newData;
this.next = newNext;
}
}
// 3. Constructors
public LString(){
this.size = 0;
this.front = null;
}
public LString(String original) {
for (int i =0; i < original.length(); i++) {
this.front = new node(original.charAt(i));
}
this.size = original.length();
}
// 4. Methods
public int length() {
return this.size;
}
public int compareTo(LString anotherLString) {
return 0;
}
public boolean equals(Object other) {
if (other == null || !(other instanceof LString)) {
return false;
}
else {
LString otherLString = (LString)other;
return true;
}
}
public char charAt(int index) {
return 'a';
}
public void setCharAt(int index, char ch) {
ch = 'a';
}
public LString substring(int start, int end) {
return null;
}
public LString replace(int start, int end, LString lStr) {
return null;
}
//append
public void append(char data){
this.size++;
if (front == null){
front = new node(data);
return;
}
node curr = front;
while (curr.next != null){
curr = curr.next;
}
curr.next = new node(data);
}
//prepend
public void prepend (char data){
/*node temp = new node(data);
temp.next = front;
front = temp;*/
front = new node(data, front);
size++;
}
//delete
public void delete(int index){
//assume that index is valid
if (index == 0){
front = front.next;
} else {
node curr = front;
for (int i = 0; i < index - 1; i++){
curr = curr.next;
}
curr.next = curr.next.next;
}
size--;
}
//toString
public String toString(){
StringBuilder result = new StringBuilder();
//result.append('[');
node curr = front;
while (curr != null){
//result.append('[');
result.append(curr.data);
curr = curr.next;
//result.append(']');
//if (curr.next != null){
//}
}
//result.append(']');
return result.toString();
}
//add (at an index)
public void add(int index, char data){
if (index == 0){
front = new node(data, front);
} else {
node curr = front;
for (int i = 0; i < index - 1; i++){
curr = curr.next;
}
curr.next = new node(data, curr.next);
}
}
}
【问题讨论】:
-
您是否调试过这个程序并逐行检查了必要的部分?真的很简单..
-
toString 只是此代码中的一个问题。你的 LString 构造函数也坏了
标签: java linked-list tostring