如果两个学生相同,我试图从链表中删除学生,这意味着重复输入。这是使用JUnit测试用例进行测试的。但是,任何测试都返回相同的列表而没有删除学生。这是removeDuplicate方法,其中list是我的linkedList。
public void removeDuplicates() {
for (int i = 0; i < list.size()-1; i++) {
for (int j = i + 1; j < list.size(); j++) {
if (list.get(i).equals(list.get(j))) {
list.remove(j);
}
}
}
}
其中一个失败测试用例的示例:
public void test_removeDuplicates_1() {
ISimpleDatabase model = new SimpleDatabaseModel();
Student s1 = new Student("John Doe", "G123456789", 3.5);
Student s2 = new Student("Paul Graham", "G123456987", 2.75);
Student s3 = new Student("Mary Joe", "G331456987", 3.25);
Student s4 = new Student("Martin Fowler", "G654789321", 3.65);
Student s5 = new Student("Paul Graham", "G123456987", 2.75);
Student s6 = new Student("Mary Joe", "G331456987", 3.25);
model.insert(s1);
model.insert(s2);
model.insert(s3);
model.insert(s4);
model.insert(s5);
model.insert(s6);
model.removeDuplicates();
String expected = s1 + "\n" + s2 + "\n" + s3 + "\n" + s4;
assertEquals(expected,model.toString().trim());
返回此错误:
我确定错误在removeDuplicates()方法中,但我似乎无法弄明白。谢谢你的帮助。
答案 0 :(得分:1)
如果你删除了一个项目,你需要先退一个j
,然后测试新洗牌的项目,否则你会错过它。
if (list.get(i).equals(list.get(j))) {
list.remove(j);
j--;
}
答案 1 :(得分:-1)
我想出了一些有用的东西。我只是检查其中一个字段是否重复,因为如果学生ID相同,那么学生也是一样的。这似乎现在通过所有测试用例。只需要一些时间来解决它。谢谢大家。
public void removeDuplicates() {
for (int i = 0; i < list.size() - 1; i++) {
int count = i + 1;
while (count < list.size()) {
if (list.get(i).getGnumber().equals(list.get(count).getGnumber())) {
list.remove(count);
} else {
count++;
}
}
}
}