2016-04-08 8 views
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 
    } 

EDITを開始するために、私が知らないこと以外の基地開始なく、を持っている:これは私がこれまで持っているものですが、私の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; 
    } 
} 
+1

あなたが私の答えで見ることができるようにx.next'は 'ので、私は、' x.key

+0

あなたの '{}'は正しい場所にありません。各ループパスの途中で戻ってきます。 – AJNeufeld

+0

「Comparable'」(https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html)は、「Comparable」オブジェクトを比較する正しい方法にも役立ちます。ヒント: '<'ではありません。 – AJNeufeld

答えて

0

擬似を与えていますコード:

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


EDIT

オクラホマので、あなたが実際にスタックオーバーフロー上の本当の助けを得るために秘密でコードを書くの本当の試みを掲載しました。

あなたのコードは、適切なインデントで、...

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文を示しています。正確にはあなたが望むものではありません。あなたは、KeyでないNodeKeyとをKeyを比較する必要があるため

if (x.next < key)も、あなたが悲しみ与えています。

最後に、Comparableインターフェイスでは、メソッドを実装するにはKeyが必要です。同じように使用:

key.compareTo(x.key) 

これは、より大きなまたはそれらが同じである場合であるかに応じ-10、または1を返します。だから、本当に欲しい:

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

または

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

運動は学生に任さ。

+0

私のコードを追加しましたが、私のforループが間違っていて、エラーが発生しています – yenyen

+0

これは順序付けされていないシンボルテーブルです – yenyen

+0

私もnor @ engineerの擬似コードもリストはソートされていません。 – AJNeufeld

1

あなたのコードはほとんど存在していますが、3つの問題があります。

  • 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; 
} 
+0

私はreturn文を修正しましたが、私はそこに置いていたことを認識しませんでした。そして、ありがとう、あなたはこれらのタイプのデータ構造にアプローチする簡単な方法を知っていますか?私はノードとリンクされたリストで苦労していました – yenyen

+0

@yenyenいいえ、それです。 – Andreas

+1

@yenyen、ホイールを再開発しないでください(すでにJavaでデータ構造がいくつかあります)。さもなければ、これは方法です。 –

関連する問題