Как я могу заставить класс правильно реализовать интерфейс? - PullRequest
1 голос
/ 03 декабря 2011

Я пытаюсь сделать так, чтобы класс правильно реализовал интерфейс, но, похоже, попал в кирпичную стену.Я не уверен, что код, который я уже написал, правильный, но это был единственный способ понять, как подойти к задаче.Мне дали интерфейс с этой информацией:

package mvcchords;

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

Приложение отображает клавиши пианино, которые позволяют пользователю нажимать на них, и сохраняет порядок, в котором они были нажаты, и мидикод примечаний для конкретногозвук.Затем, когда пользователь нажимает кнопку воспроизведения, он вызывает мелодию в порядке сохранения заметок.Когда пользователь нажимает на заметку, вызывается noteAdded.hasNextNote используется, чтобы проверить, является ли это концом сохраненных заметок или нет.getNextNote используется для получения следующей заметки из списка массивов, а start вызывается, когда пользователь нажимает кнопку воспроизведения.Мне сказали, что целое число sortOrder не имеет отношения к этой части задачи.Мне сказали, что при нажатии кнопки воспроизведения следует вызывать метод start, а затем повторно вызывать метод getNextNote до тех пор, пока не будут получены все заметки.

Ниже приведен код, который я написал таккласс для реализации этого интерфейса;

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

Этот код дает мне ошибку, говорящую

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

Я не знаю, куда идти отсюда, и любая помощь будет признательна,Если потребуется дополнительная информация, я сделаю все возможное, чтобы уточнить любые замечания, которые я высказал.

Заранее благодарен:)

Ответы [ 3 ]

1 голос
/ 03 декабря 2011

Хотя вы создали методы с правильными именами, вам также необходимо иметь правильные параметры и возвращаемые типы.Так что в этом случае вам нужно изменить:

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

, чтобы удалить целочисленные параметры.

В основном вам необходимо отслеживать ноты, воспроизводимые в классе, чтобыне нужно передавать целое число все время.Вы можете использовать итератор или просто сохранить целое число для отслеживания последнего воспроизведенного индекса.Приведенный ниже метод использует итератор, может быть, вам следует попытаться создать его с целым числом самостоятельно.

    public class MyNoteStore implements NoteStore {

    ArrayList<Integer> notes = new ArrayList<Integer>();
    Iterator<Integer> playbackIter;    

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

    public boolean hasNextNote() {
        if (playbackIter != null) {
            return playbackIter.hasNext();
        }
        else {
            return false;
        }
    }

    public int getNextNote() {
        if (playBackIter != null) {
            return playBackIter.next();
        }
        else {
            return -1;
        }

    }

    public void start(int sortOrder) {
        playBackIter = notes.iterator();
        while(hasNextNote()) {
            int note = getNextNote();
            //play note
        } 
    }
 }
0 голосов
/ 03 декабря 2011

Ну,

ваш интерфейс определяет методы:

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

Итак,

ваш класс должен реализовать их с точным определением, что означает с тем жевозвращаемый тип и параметры.Таким образом, вы можете изменить их в объявлении интерфейса или в реализации класса.

0 голосов
/ 03 декабря 2011

Параметры в методе отличаются между вашей реализацией и объявлением в интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...