首页 > 解决方案 > 为什么我的测试 Java 方法只返回列表中的第一个键?

问题描述

    public Key equalorLess(Key key) {
    if (first == null || first.key.compareTo(key) > 0) return null;
    Node x = first;
    while(x.next != null && x.next.key.compareTo(key) <= 0) {
        x = x.next;
    }
        return x.key;
  }  

这是返回表中最大键的代码,它是 < 或 = 输入键。因此,在“abcd”中,如果您调用“e”,您将返回“d”。或者如果你叫“a”,你会得到“a”。

我正在编写如下所示的测试代码。先行者,我知道这是一团糟。

        public static void equalorLessTest( String key, String answer) {
        String keys = "abcdefijklxyz";
        LinkedList<String,Integer> newLst= new LinkedList<String,Integer>();
        for (int i =0; i < keys.length(); i++) {
        newLst.put(keys.substring(i, i+1),i);
        }
        String result = newLst.equalorLessTest(key);
        if ( answer == null) {
            if (result == null)
                StdOut.format("equalorLessTest: Correct  String %s Answer: null\n", key,result);
            else
                StdOut.format("equalorLessTest: *Error*  String %s Actual: %s\n", key,result);
            return;
        }
        if (result == null && answer != null ) { 
            StdOut.format("equalorLess: *Error*  String %s Actual: null\n", key,result);
            return;
        }
        if ( result.compareTo(answer) ==0)  
            StdOut.format("equalorLess: Correct  String %s Actual: %s\n", key,result);
        else
            StdOut.format("equalorLess: *Error*  String %s Actual: %s\n", key,result);
    }

唯一有效的测试是检查空值。我正在迭代那组测试键。所以,如果我把“b”作为我的输入,我会得到“a”。我尝试测试的每一个都返回“a”。在其他测试用例中,我倾向于在我创建的给定列表中获得空值或第一个键。有人可以看看我的测试方法并告诉我发生了什么。我相信实际的功能是正确的。它需要以这种方式完成。我不能使用其他方法。

标签: java

解决方案


的两个分支if是相同的:

if(temp!= null && x.key.compareTo(temp) >= 0) 
    temp = x.key;
else
    temp = x.key;

那一定是个bug。


推荐阅读