Почему простой метод для l oop работает в методе onCreate, а не в классе MainActivity? - PullRequest
0 голосов
/ 09 марта 2020

Я учусь Android, и я столкнулся с аномальным поведением al oop в классе Main Activity в Android. Рассмотрим следующий фрагмент кода:

public class MainActivity extends AppCompatActivity {
int game_board[][] = new int[3][3];    
    int limit = 3;
    for(int row = 0; row < limit; row++){
        for(int column = 0; column < limit; column++){
            game_board[row][column] = -1;
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        for(int row = 0; row < limit; row++){
            for(int column = 0; column < limit; column++){
                game_board[row][column] = -1;
            }
        }
    }
}

Значение для l oop в классе MainActivity дает мне список ошибок времени компиляции (все синтаксические), например: error: ')' ожидается, ошибка: ';' ожидается для внешнего row для l oop. Но то же самое вложенное для l oop не вызывает никаких ошибок в методе onCreate.

В чем причина этого? Это как-то связано с UI-потоком или просто с базовой концепцией c в целом? (Также перезапустил Android Studio, но все равно получил те же проблемы). Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 09 марта 2020

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

2 голосов
/ 09 марта 2020

Некоторые ответы хорошо объяснены. По сути, вы можете просто поместить метод внутри самого класса, он должен быть помещен внутри метода, как вы упомянули, внутри onCreate

И я думаю, что есть особый случай, когда вы хотите, чтобы ваш метод не зависел по другому методу (например, onCreate). На этот раз вы можете рассмотреть возможность сделать ваш метод на static.

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

Возьмите ваш код в качестве примера, сначала оберните ваш l oop внутри аннотированного метода stati c:

public static void doForLoop() {
    int game_board[][] = new int[3][3];    
    int limit = 3;
    for(int row = 0; row < limit; row++){
        for(int column = 0; column < limit; column++){
            game_board[row][column] = -1;
        }
    }
}

Затем вы можете вызвать этот метод doForLoop прямо внутри класса сам.

Вы можете узнать больше о static методе и static variable, если хотите.

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

Вы не можете написать код в классе; код должен быть помещен в метод.

  public class MainActivity extends AppCompatActivity {

     int game_board[][] = new int[3][3];   

     void name_void(){ 
            int limit = 3;
            for(int row = 0; row < limit; row++){
                for(int column = 0; column < limit; column++){
                    game_board[row][column] = -1;
                }
               }
              }

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                name_void();
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...