我有这个方法,它将搜索LinkedList(名为ListNode)并检查字符并检查它们是否包含大写字符,然后将其存储在新链接列表中,然后返回该字符串。我为它编写了代码,使用JUnit进行了测试,但是它失败了JUNit(在那些蓝色框中)。有谁知道出了什么问题?LinkedList方法的JUnit测试失败,为什么?
这里是我的LinkedList方法:
public static ListNode copyUpperCase(ListNode head) {
ListNode newListNode = mkEmpty();
if(head == null){
throw new ListsException("");
}else{
while(head.next != null){
if(Character.isUpperCase(head.element)){
newListNode.element = head.element;
}
head = head.next;
}
}
return newListNode;
}
这里是ListNode:
public class ListNode {
public char element;
public ListNode next;
}
这里是测试方法:
@Test
public void testCopyUpperCase()
{
// Inject upper case letters randomly in the test strings.
// Assert equal results when extracting the upper case chars from
// the corresponding list, as wheen extracting them from the
// injected string itself.
for (String s : cases) {
String uppersAndLowers = randInjectUpper(s);
// Extract the upper case characters
StringBuilder uppers = new StringBuilder();
for (int i = 0; i < uppersAndLowers.length(); i++) {
final char c = uppersAndLowers.charAt(i);
if (Character.isUpperCase(c))
uppers.append(c);
}
ListNode temp = Lists.toList(uppersAndLowers);
ListNode lhs = Lists.copyUpperCase(temp);
assertFalse(hasSharedNodes(temp,lhs));
ListNode rhs = Lists.toList(uppers.toString());
assertTrue(Lists.equals(lhs,rhs));
}
}
在TestMethod的失败行是最后,它是:
assertTrue(Lists.equals(lhs,rhs));
这是什么意思,如果它在该行失败?
ps。这里是equals方法也:
// Two lists are equal if both are empty, or if they have equal lengths
// and contain pairwise equal elements at the same positions.
public static boolean equals(ListNode l1,ListNode l2) {
if (isEmpty(l1) && isEmpty(l2))
return true;
else if (isEmpty(l1) || isEmpty(l2))
return false;
else { // both lists are non-empty
ListNode p1 = l1.next, p2 = l2.next;
while (p1 != null && p2 != null) {
char c1 = p1.element, c2 = p2.element;
if (p1.element != p2.element)
return false;
p1 = p1.next;
p2 = p2.next;
}
return p1 == null && p2 == null;
}
}
编辑:这是新方法:
public static ListNode copyUpperCase(ListNode head) {
ListNode newListNode = mkEmpty();
if(head == null){
throw new ListsException("Lists: null passed to copyUpperCase");
}else{
String cpy = toString(head);
char[] chry = cpy.toCharArray();
for(int i = 0; i < chry.length ; i++)
if(Character.isUpperCase(chry[i])){
newListNode.element = chry[i];
}
newListNode = newListNode.next;
}
return newListNode;
}
我认为while循环copyUpperCase如果没有到最后一个项目复制到其他目录。 –