0

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

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;
    }
}
4

2 回答 2

1

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

  • return语句在for循环内。如果你更正了缩进,你会看到。把它移到外面。
  • 你不想和x.next比较key。您想与x.key参数进行比较key
  • 您无法使用<运算符进行比较。既然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;
}
于 2016-04-08T22:16:33.090 回答
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)也让你感到悲伤,因为你需要与 比较Key,而Key不是NodeKey

最后,Comparable接口需要Key实现compareTo(Key other)方法。像这样使用:

key.compareTo(x.key)

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

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

或者

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

练习留给学生。

于 2016-04-08T21:51:29.833 回答