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

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)もあなたに悲しみを与えています。KeyKeyNodeKey

最後に、ComparableインターフェイスにはメソッドKeyを実装するための the が必要compareTo(Key other)です。次のように使用します。

key.compareTo(x.key)

どちらが大きいか、または同じであるかに応じて-1、 、0、またはを返します。1だからあなたは本当に欲しい:

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

また

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

練習は生徒任せ。

于 2016-04-08T21:51:29.833 に答える