Создание и взаимосвязь функций между собой

Ответить
Аватара пользователя
IlyaZh
Сообщения: 32
Зарегистрирован: 14 июл 2012, 09:52
Откуда: Санкт-Петербург
Контактная информация:

Создание и взаимосвязь функций между собой

Сообщение IlyaZh » 14 июл 2012, 09:55

Здравствуйте. Столкнулся со следующей проблемой.
Имеется код приложения. Для лучшего его восприятия и логики я разбил его на блоки, которые загнал в функции и просто вызываю эти функции. Например:

Код: Выделить всё

initGame();
initMenu();
...
public void initGame() {
// код инициализирующий игру
}
public void initMenu() {
// код инициализирующий меню в игре
}
Таким образом у меня сложилась следующая ситуация. Внутри одной функции я считываю данные и передаю их в другую функцию в качестве параметра. Внутри этой функции я вызываю ещё две функции, которые описывают последовательный кусок кода, но с отличием в том, что - первая функция выполняется один раз, а вторая каждый раз внутри цикла т.к. получив данные она преобразовывает их (например строит список). Однако, во второй функции есть переменные, определённые в первой, которые она конечно же не может использовать.

Вопрос: можно ли как-то сделать, чтобы переменные, определённые в одной функции, могли использоваться в другой? Или как описать функцию, которая просто является "куском кода" - процедурой какой-то?

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Создание и взаимосвязь функций между собой

Сообщение andev » 14 июл 2012, 10:13

Если я вас правильно понял, то как вариант можно объявить необходимые переменные не в одной из функций, а на уровне класса и они станут доступны всем методам (функциям)

Аватара пользователя
IlyaZh
Сообщения: 32
Зарегистрирован: 14 июл 2012, 09:52
Откуда: Санкт-Петербург
Контактная информация:

Re: Создание и взаимосвязь функций между собой

Сообщение IlyaZh » 14 июл 2012, 10:40

Вот отрывок кода. В функции initMap() eclipse ругается на неопределённость переменных mMapController и mMapView

Код: Выделить всё

...
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map);
     
        final MapView mMapView = (MapView) findViewById(R.id.map);
       
        // Получаем MapController
        final MapController mMapController = mMapView.getMapController();
        //mMapController.getOverlayManager().getMyLocation().setEnabled(false);
       
        // Инициализация карты
        initMap();
        // Инциализация кнопок переключение режима карта-спутник
        initMapTypeSelector();
}
....
   public void initMap() {
  
       mMapController.setZoomCurrent(15);
       
       mMapView.showFindMeButton(true);
       mMapView.showZoomButtons(true);
       mMapView.showJamsButton(false);
       mMapView.showBuiltInScreenButtons(true);
   }

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Создание и взаимосвязь функций между собой

Сообщение rezak90 » 14 июл 2012, 11:06

во-первых, в ява понятия "функция" нету, это осталось в С++, а ява построена на классах.
во-вторых, выше уже говорили что объяви на уровне класса переменные.
в третьих, как вариант можно передавать переменные в методы и их использовать (см. ниже).

Код: Выделить всё

//на уровне класса
public class A {
   private int x, y;
   public A() {
      init();
      Log.i("MyTag", "result = " + result());
   }
   private void init() {
      x = 3;
      y = 8;
   }
   private int result() {
      return x*y;
   }
}

Код: Выделить всё

//передаём в методы
public class A {
   public A() {
      Log.i("MyTag", "result = " + init());
   }
   private int init() {
      int x = 3, y = 8;
      return result(x, y);
   }
   private int result(int _x, int _y) {
      return _x*_y;
   }
}
это элементарные примеры, думаю что идея понятна.
R.id.team
Политика на форуме запрещена

Аватара пользователя
IlyaZh
Сообщения: 32
Зарегистрирован: 14 июл 2012, 09:52
Откуда: Санкт-Петербург
Контактная информация:

Re: Создание и взаимосвязь функций между собой

Сообщение IlyaZh » 14 июл 2012, 11:42

Всё ясно. Спасибо. Пойду разбирать свой код! :)

Ответить