2011-12-03 38 views
1

クラスを正しく実装するようにしようとしていますが、レンガの壁に当たったようです。私がすでに書いたコードが正しいのかどうかは分かりませんが、それは私がそのタスクに近づく方法を理解している唯一の方法でした。私は、この情報とのインタフェースを与えられている:クラスを正しく実装する方法を教えてください。

package mvcchords; 

public interface NoteStore { 
    int getNextNote(); 
    boolean hasNextNote(); 
    void noteAdded(int midicode); 
    void start(int sortOrder); 
} 

アプリケーションは、ユーザがそれらをクリックすることができますピアノのキーを表示し、それは彼らがクリックされたため、特定の音のためのノートのmidicodeを節約できます。次に、ユーザーが再生をクリックすると、ノートが保存された順に曲が呼び出されます。ユーザーがノートをクリックするとnoteAddedが呼び出されます。 hasNextNoteは、保存された音符の最後かどうかを確認するために使用されます。 getNextNoteは配列リストから次の音符を取得するために使用され、ユーザが再生ボタンをクリックするとstartが呼び出されます。私は整数sortOrderがタスクのこの部分に無関係であると言われました。再生ボタンをクリックすると、startメソッドが呼び出され、すべての音符が取得されるまで、getNextNoteメソッドが繰り返し呼び出されるはずです。

以下は、このインターフェイスを実装するクラスのためにこれまでに書いたコードです。このコードは、私に

MyNoteStore is not abstract and does not override abstract method `hasNextNote()` in `mvcchords.NoteStore`. 

が、私はここから行くし、任意の助けをいただければ幸いどこかわからないというエラーを与える

import java.util.*; 
import mvcchords.*; 

public class MyNoteStore implements NoteStore { 

public ArrayList<Integer> Notes; 

public void noteAdded(int midicode) { 
    Notes.add(midicode); 
} 

public boolean hasNextNote(int k) { 
    if(Notes.get(k) != null) 
     return true; 
    else 
     return false; 
} 

public int getNextNote(int k) { 

     if(hasNextNote(Notes.get(k)) == true) 
      return Notes.get(k); 
     else 
      return 0; 
    } 

public void start(int sortOrder) { 

    for(int k = 0; k < Notes.size(); k++){ 
    hasNextNote(k); 
    getNextNote(k); 
    } 
    } 
} 

。さらなる情報が必要な場合は、私が作成したポイントを明確にするために最善を尽くします。

は、事前にありがとう:)

答えて

0

メソッドのパラメータは、あなたの実装とインタフェースの宣言の間で異なっています。

+0

はいオンラインで見た後、私はこれを行うことができないことがわかりましたが、これ以外にクラスを正しく作成する方法がわかりません。私は答えを与えられることを望んでいない、行く正しい方向に向かってちょうどヒント:)応答のためにありがとう。 – user1079168

+0

問題のドメインを理解できません(ピアノとノートについては何も知らない)。しかし、私は、ノーツ・コレクションがキーkへの依存性を失う必要があると推測します。したがって、それを渡す必要なしに、Notesコレクションからキーを取得できます。たとえば、Notesがリストの場合、現在のノートのインデックスを(クラス内の)整数変数に保持し、次のノートを取得するときにそれを前進させます)。私はあなたがインタフェースを変更できないと仮定しています。つまり、実装の内部を変更する必要があります。 – Gigi

0

まあ、

あなたのインターフェイスは、メソッドを定義します。

int getNextNote(); 
    boolean hasNextNote(); 
    void noteAdded(int midicode); 
    void start(int sortOrder); 

ので、

クラスが同じ戻り値の型とパラメータを意味し、正確な定義は、それらを実装する必要があります。したがって、インタフェース宣言またはクラス実装でそれらを変更することができます。

1

正しい名前のメソッドを作成したが、正しいパラメータと戻り値の型を持つ必要があります。したがってこの場合は、整数パラメータを削除するには、

int getNextNote(int i); 
boolean hasNextNote(int k); 

を変更する必要があります。

基本的に、いつも整数を渡す必要がないように、クラス内で再生されたノートを追跡する必要があります。イテレータを使用するか、最後に再生されたインデックスを追跡するために整数を格納することができます。以下のメソッドはイテレータを使用しています。おそらく、あなた自身で整数を持つものを作成してください。

関連する問題