get (int) в List нельзя применить для get (Java.lang.string ()) - PullRequest
0 голосов
/ 07 июня 2018

У меня небольшая проблема с synatx.Для всех проблем с:

selectButton = emptyButtons.get(field[i][0]); 

или чем-то подобным я получаю следующую ошибку

 get(int) in List cannot be applied to get(Java.lang.string()). 

Каков правильный синтаксис, чтобы это исправить?

Ниже приведенкод:

private void computerMove() {
    String[][] field = new String[3][3];
    Random random = new Random(); //you may want to declare this as a class field
    List<Button> emptyButtons = new ArrayList<>();

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            field[i][j] = buttons[i][j].getText().toString();
            if (field[i][j].equals("")) {
                emptyButtons.add(buttons[i][j]);
            }
        }
    }

    Button selectButton;

    for (int i = 0; i < 3; i++) {
        if (field[i][0].equals(field[i][1])
                && field[i][2].equals("")){
           selectButton = emptyButtons.get(field[i][2]);
        }
        else if (field[i][0].equals(field[i][2])
                && field[i][1].equals("")){
            selectButton = emptyButtons.get(field[i][1]);
        }
        else if (field[i][1].equals(field[i][2])
                && field[i][0].equals("")){
            selectButton = emptyButtons.get(field[i][0]);
        }
        else {
            selectButton = emptyButtons.get(random.nextInt(emptyButtons.size()));
        }

    selectButton.setText("O");
    selectButton.setTextColor(playerO);
    turnsCount++;
    isGameOver();

}

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Как вы объяснили, что ваш синтаксис неправильный, у ArrayList нет такого метода, как get (String).Вы должны поддерживать счет, чтобы вы могли получить его, используя этот счет. Поэтому вам нужно изменить свою логику здесь.

0 голосов
/ 07 июня 2018

Как вы уже упоминали, проблема связана с несоответствием типов данных.

Самый простой способ решить эту проблему - использовать HashMap вместо использования ArrayList.

Ниже приведен модифицированный код с использованием HashMap:

private void computerMove() {
    String[][] field = new String[3][3];
    Random random = new Random(); //you may want to declare this as a class field
    HashMap<Integer,Button> emptyButtons = new HashMap<>();

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            field[i][j] = buttons[i][j].getText().toString();
            if (field[i][j].equals("")) {
                emptyButtons.put(i*3 + j,buttons[i][j]);
            }
        }
    }

    Button selectButton;

    for (int i = 0; i < 3; i++) {
        if (field[i][0].equals(field[i][1])
                && field[i][2].equals("")){
           selectButton = emptyButtons.get(i*3 +2);
        }
        else if (field[i][0].equals(field[i][2])
                && field[i][1].equals("")){
            selectButton = emptyButtons.get(i*3 +1);
        }
        else if (field[i][1].equals(field[i][2])
                && field[i][0].equals("")){
            selectButton = emptyButtons.get(i*3);
        }
        else {
            selectButton = emptyButtons.get(random.nextInt(emptyButtons.size()));
        }

    selectButton.setText("O");
    selectButton.setTextColor(playerO);
    turnsCount++;
    isGameOver();

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