符号表的排名

时间:2016-04-08 21:44:47

标签: java symbol-table

如何返回小于给定密钥的密钥数?我只是不知道从哪里开始。我有基础开始,但除此之外我不知道从哪里开始

public class LinkedListST<Key extends Comparable<Key>, Value> {
    private Node first;      // the linked list of key-value pairs

    // a helper linked list data type
    private class Node {
        private Key key;
        private Value val;
        private Node next;

        public Node(Key key, Value val, Node next)  {
            this.key  = key;
            this.val  = val;
            this.next = next;
        }
    }

public int rank (Key key) {
        if(key == null) return 0;
        //TODO
    }

编辑:这是我到目前为止,但我的for循环是错误的,并给我错误

public int rank (Key key) {
    int count = 0;
    for(Node x = first; x != null; x = x.next){
        if(x.next < key){
            count++;
        }
    return count;
    }
}

2 个答案:

答案 0 :(得分:1)

您的代码几乎就在那里,但您有三个问题:

  • return语句位于for循环内。如果你纠正了缩进,你就会看到。把它移到外面。
  • 您不想将x.nextkey进行比较。您想将x.keykey参数进行比较。
  • 您无法使用<运算符进行比较。由于KeyComparable,您可以通过调用compareTo()进行比较。

以下是更新后的代码:

public int rank (Key key) {
    int count = 0;
    for (Node x = first; x != null; x = x.next) {
        if (x.key.compareTo(key) < 0){
            count++;
        }
    }
    return count;
}

答案 1 :(得分:0)

伪代码:

initialize counter to zero
loop over all nodes, starting at first:
   if node's key < key:
       increment count
return count

这应该让你开始。

修改

好的,所以你实际上已经发布了编写代码的真实尝试,这是获得Stack Overflow实际帮助的秘诀。

你的代码,有适当的缩进,......

public int rank (Key key) {
    int count = 0;
    for(Node x = first; x != null; x = x.next){
        if (x.next < key){
            count++;
        }
        return count;  // <-- Note!
    }
}

...在循环中显示一个return语句。不完全是你想要的。

if (x.next < key)也让您感到悲痛,因为您需要将KeyKey进行比较,而不是将NodeKey进行比较。

最后,Comparable界面要求Key实施compareTo(Key other)方法。使用如下:

key.compareTo(x.key)

这会返回-101,具体取决于哪个更大或者它们是否相同。所以你真的想要:

if (key.compareTo(x.key) < 0) {

if (key.compareTo(x.key) > 0) {

留给学生锻炼。