如何返回小于给定密钥的密钥数?我只是不知道从哪里开始。我有基础开始,但除此之外我不知道从哪里开始
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;
}
}
答案 0 :(得分:1)
您的代码几乎就在那里,但您有三个问题:
return
语句位于for
循环内。如果你纠正了缩进,你就会看到。把它移到外面。x.next
与key
进行比较。您想将x.key
与key
参数进行比较。<
运算符进行比较。由于Key
为Comparable
,您可以通过调用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)
也让您感到悲痛,因为您需要将Key
与Key
进行比较,而不是将Node
与Key
进行比较。
最后,Comparable
界面要求Key
实施compareTo(Key other)
方法。使用如下:
key.compareTo(x.key)
这会返回-1
,0
或1
,具体取决于哪个更大或者它们是否相同。所以你真的想要:
if (key.compareTo(x.key) < 0) {
或
if (key.compareTo(x.key) > 0) {
留给学生锻炼。