Как мне использовать getIndices здесь с циклом for? - PullRequest
0 голосов
/ 09 марта 2019
public void calculateTotal(){
    int wheelIndex = wheels.getSelectionModel().getSelectedIndex();
    int deckIndex = decks.getSelectionModel().getSelectedIndex();
    int truckIndex = trucks.getSelectionModel().getSelectedIndex();
    int [] miscArray = misc.getSelectionModel().getSelectedIndices();
    int miscTotal = 0;

    for(int i = 0; i < miscArray.length; i++){
        miscTotal += miscPrices[miscArray[i]];
    }
}

Мои проблемы лежат на int [] miscArray = misc.getSelectionModel().getSelectedIndices();

Он говорит мне перейти на ObservableList, но если я перейду на него, я не смогу получить доступ к i < miscArray.length или miscArray[i] индексу. Кто-нибудь может помочь?

1 Ответ

1 голос
/ 09 марта 2019

Метод selectionModel.getSelectedIndices() возвращает ObservableList<Integer>, а не массив.Поэтому вы должны использовать этот список или преобразовать этот список в массив.

Чтобы получить размер списка, вы можете просто использовать метод list.size().Чтобы получить элемент из списка, вы можете использовать list.get(index). Здесь - полные документы Java для ObservableList.

public void calculateTotal(){
    int wheelIndex = wheels.getSelectionModel().getSelectedIndex();
    int deckIndex = decks.getSelectionModel().getSelectedIndex();
    int truckIndex = trucks.getSelectionModel().getSelectedIndex();
    ObservableList<Integer> miscList = misc.getSelectionModel().getSelectedIndices();
    int miscTotal = 0;

    for(int i = 0; i < miscList.size(); i++){
        miscTotal += miscPrices[miscList.get(i)];
    }
}

В качестве альтернативы вы можете использовать потоки Java:

int miscTotal = miscList.stream().mapToInt(i -> miscPrices[i]).sum();

Если вы хотите преобразовать ObervableList к массиву (я бы этого не делал) вы можете использовать метод list.toArray().

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