Как получить и индексировать объект массива - PullRequest
0 голосов
/ 15 апреля 2019

Я просматриваю массив и пытаюсь получить индекс объекта, удовлетворяющего некоторым критериям.Я не могу найти способ сделать это.

Я пытался использовать herniPlan.indexOf (m), я получаю сообщение «Не удается найти символ - метод indexOf (hra.Mince)

public class MojeHra implements IHra {
private Mince[] herniPlan;
int index;

    public MojeHra()
    {
        herniPlan = new Mince[20];

        herniPlan[0] = Mince.LITECOIN;
        herniPlan[3] = Mince.LITECOIN;
        herniPlan[4] = Mince.BITCOIN;
        herniPlan[8] = Mince.LITECOIN;

        hracVyhral = false;
        hraSkoncila = false;
    }

    public Tah tahPocitace()
    {


        for(Mince m : herniPlan) {
            if(m.equals(Mince.LITECOIN) || m.equals(Mince.BITCOIN)){
                index = herniPlan.indexOf(m)
                    Tah tah = new Tah(index, 19);
                } 
            }
        } 

Ответы [ 3 ]

2 голосов
/ 15 апреля 2019

Расширенный оператор for (for(... : ...)) не предлагает индексировать массив. Вам нужно базовое for утверждение (for(...; ...; ...)).

for (int i = 0; i < herniPlan.length; ++i) {
    Mince  m = herniPlan[i];
    // i is your index 
}
1 голос
/ 15 апреля 2019

Во-первых, было бы лучше пройти через индекс напрямую:

for(int i = 0; i < herniPlan.length; i++) {
    if(herniPlan[i].equals(Mince.LITECOIN) || herniPlan[i].equals(Mince.BITCOIN)){
        index = i;
    }
}

Я вижу, что ваш массив неполон, поэтому вам следует проверить наличие нулей:

for(int i = 0; i < herniPlan.length; i++) {
    if(herniPlan[i] != null) {
        if(herniPlan[i].equals(Mince.LITECOIN) 
                || herniPlan[i].equals(Mince.BITCOIN)){
            index = i;
        }
    }
}

Наконец, вы можете рассмотреть возможность использования коллекций Java для своих приложений. Я бы посоветовал вам использовать java.util.Map, поскольку я предполагаю, что индексы в herniPlan имеют особое значение, помимо просто индексации. С java.util.Map вы можете сопоставить эти значения с конкретным Mince.

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class MojeHra implements IHra {
    private Map<Integer, Mince> herniPlan;
    int index;

    public MojeHra() {
        herniPlan = new HashMap<>();

        herniPlan.put(0, Mince.LITECOIN);
        herniPlan.put(3, Mince.LITECOIN);
        herniPlan.put(4, Mince.BITCOIN);
        herniPlan.put(8, Mince.LITECOIN);

        hracVyhral = false;
        hraSkoncila = false;
    }

    public Tah tahPocitace()
    {
        for(Entry<Integer, Mince> entry : herniPlan.entrySet()) {
            if(entry.getValue().equals(Mince.LITECOIN) 
                    || entry.getValue().equals(Mince.BITCOIN)){
                index = entry.getKey();
                    Tah tah = new Tah(index, 19);
            } 
        }
    }
}
0 голосов
/ 15 апреля 2019

Вы можете использовать index = Arrays.asList(herniPlan).indexOf(m)

Arrays.asList(herniPlan) приведёт массив к ArrayList<Mince>

А затем он использует метод ArrayList.indexOf () класса ArrayList, он вернет позицию объекта в ArrayList.

См .: https://www.tutorialspoint.com/java/util/arraylist_indexof.htm

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