Урок 18. Примеры методов в Java

Не будем вносить беспорядок в нашу с вами игру. Быстренько создадим новый пустой проект и попрактикуемся в написании методов. Также нам не понадобится тратить время на пользовательский интерфейс. Будем использовать консоль для просмотра результатов и обсуждения последствий наших примеров. Начнём с создания нового проекта:

 

  • Закройте открытые проекты Android Studio с помощью File | Close project
  • Нажимаем File | New | New project
  • Появится окно конфигурации нового проекта. Заполняете поле Application name и кликаете Next:

новый проект в android studio

  • В следующем окне удостоверьтесь, что в чекбоксе “Phone and Tablet” стоит галочка. Минимальную версию Android API, на которой запустится наше приложение лично я ставлю – API 21:

android studio api

  • Далее выбираем Empty Activity и жмём Next:

empty activity android studio

  • В следующем окне оставляем всё без изменений, жмём Finish и ждём пока Android studio создаст нам новый проект:

main activity android studio

Разрабатываем метод

Разработаем с вами метод, который принимает в качестве параметров 3 числа и возвращает значение true или false коду, который вызвал этот метод в зависимости от того было ли одно из этих трёх чисел случайно сгенерировано внутри этого метода:

  • В этом методе мы будем пользоваться возможностями класса Random, а в частности методом nextInt, рассмотренный нами ранее. Скопируйте код ниже и вставьте его сразу же после закрывающейся фигурной скобки метода onCreate, но до закрывающейся скобки класса MainActivity. Android Studio в очередной раз напомнит вам о необходимости импорта недостающих классов, сделайте это (Alt+Enter):
    boolean guessANumber(int try1, int try2, int try3) {
         //все линии Log.i отобразятся в консоли Android
         Log.i("info", "Hi there, I am in the method body");
         //покажем, что все параметры прибыли в метод
         //выведем их в консоль
         Log.i("info", "try1 = " + try1);
         Log.i("info", "try2 = " + try2);
         Log.i("info", "try3 = " + try3);
  • Теперь объявим переменную found типа Boolean и инициализируем её значением false. Переменная found сменит своё значение на true если будет угадано случайное число. Далее мы объявим наше случайное число и напишем код для вывода значения, которое оно приняло, в консоль. Копируйте и вставляйте этот код сразу же за тем, который вы вставили ранее:
    //используем переменную found, как хранилище значения true или false
    //инициализиурем значением false
    boolean found = false;
    //создаём объект класса Random, чтобы в дальнейшем проводить с ним манипуляции
    Random randInt = new Random();
    //генерируем случайное число в диапазоне 0-5
    int randNum = randInt.nextInt(6);
    //отображаем его в нашей консоли
    Log.i("info", "Our random number = " + randNum);
  • Последней порцией кода в нашем методе будет проверка на соответствие хотя бы одного из переданных параметров случайно сгенерированному числу, выводу некоей информации и возврат (return) значения true или false через переменную found вызвавшему наш метод коду в методе onCreate:
    //Проверка, не совпадает ли одно из заданных нами чисел с randNum
    if(try1 == randNum || try2 == randNum || try3 == randNum){
         found = true;
         Log.i("info", "aha!");
         } else {
         Log.i("info", "hmmm");
         }
       return found;
     }

    Теперь вставьте (или впишите) ниже показанный код прямо перед закрывающейся фигурной скобкой метода onCreate:

    //все линии Log.i отобразятся в консоли Android
    Log.i("info", "I am in the onCreate method");
    //вызываем метод guessANumber с тремя параметрами
    //и если метод вернет значение true - вывести в консоль "Found it!"
    if(guessANumber( 1,2,3 )) {
         Log.i("info", "Found It!");
         } else {//а если метод вернет значение false - вывести в консоль "Can't find it"
         Log.i ("info", "Can't find it");
         }
    //продолжение программы
    Log.i("info", "Back in onCreate");

    Запустите это “приложение” на эмуляторе или девайсе. Всем сообщениям, которые в этой программе мы отображаем в консоли мы дали тэг info. Окно консоли находится под областью редактирования кода:

консоль android studio

У нас есть возможность отфильтровать его содержимого, набрав в поле поиска info:

tag info search android studio

Для ясности, вот точный вывод консоли без лишней информации. Помните, что мы имеем дело с случайным числом и поэтому наши с вами результаты могут отличаться:

I/info: I am in the onCreate method

I/info: Hi there, I am in the method body

I/info: try1 = 1

I/info: try2 = 2

I/info: try3 = 3

I/info: Our random number = 5

I/info: hmmm

I/info: Can’t find it

I/info: Back in onCreate

Теперь пошагово разберёмся, что мы написали с вами и как это работает?

 
Первое, что мы сделали – это объявили метод с именем guessANumber с тремя параметрами типа int. Так же мы знаем, что он должен будет вернуть значение типа данных boolean. Далее мы выводим значения новых переменных, переданных в качестве параметров и сообщение о том, что наш метод выполняется:

boolean guessANumber(int try1, int try2, int try3) {
     //все линии Log.i отобразятся в консоли Android
     Log.i("info", "Hi there, I am in the method body");
     //покажем, что все параметры прибыли в метод
     //выведем их в консоль
     Log.i("info", "try1 = " + try1);
     Log.i("info", "try2 = " + try2);
     Log.i("info", "try3 = " + try3);

Далее мы объявляем и инициализируем переменную found типа boolean, которую будем использовать при возврате (return) значения вызывающему наш метод коду:

//используем переменную found, как хранилище значения true или false
//инициализиурем значением false
boolean found = false;

После чего создаём объект класса Random и генерируем случайное число в диапазоне 0-5. И также выводим в консоль эту информацию:

//создаём объект класса Random, чтобы в дальнейшем проводить с ним манипуляции
Random randInt = new Random();
//генерируем случайное число в диапазоне 0-5
int randNum = randInt.nextInt(6);
//отображаем его в нашей консоли
Log.i("info", "Our random number = " + randNum);

Потом мы используем условный переход if вкупе с логическим оператором ИЛИ (OR), чтобы определить, соответствует ли какой-либо из переданных параметров только что созданному случайному номеру:

//Проверка, не совпадает ли одно из заданных нами чисел с randNum
if(try1 == randNum || try2 == randNum || try3 == randNum){

Если условие принимает значение true, то есть, какая-то из переменных try1, try2, try3 равна randNum, то выполняется следующий код:

found = true;
Log.i("info", "aha!");

Если условие не верно (false), то выполняется код из else – выводится в консоль сообщение, а переменная found так и остается false:

} else {
Log.i("info", "hmmm");
}

И в конце нашего метода мы возвращаем значение переменной found вызвавшему наш метод коду:

return found;
}

 
На этом наш метод разработан. Теперь разберёмся как мы его вызвали. В методе onCreate мы начинаем с того, что выводим в лог простое сообщение о том, что мы вошли в метод:

//все линии Log.i отобразятся в консоли Android
Log.i("info", "I am in the onCreate method");

Затем мы вызываем метод guessANumber с тремя параметрами. В нашем случае – это 1, 2 и 3, но указать вы там можете любое целочисленное значение. Стоит заметить, что мы поместили наш метод в условие перехода if. Это означает, что возвращаемое значение нашего метода будет использоваться в качестве значения, которое примет условие этого if. Проще говоря, если метод guessANumber вернёт значение true, то будет выполнен переход к инструкции в if для вывода сообщения Found it!”:

//вызываем метод guessANumber с тремя параметрами
//и если метод вернет значение true - вывести в консоль "Found it!"
if(guessANumber( 1,2,3 )) {
        Log.i("info", "Found It!");

В противном случае метод guessANumber вернёт значение false и будет выполнена инструкция в else:

} else {//а если метод вернет значение false - вывести в консоль "Can't find it"
     Log.i ("info", "Can't find it");
}
//продолжение программы
Log.i("info", "Back in onCreate");

Еще раз напоминаю вам о том, что мы имеем дело со случайным числом и может быть вам придётся несколько раз запускать приложение, чтобы увидеть оба варианта. Также следует отметить, что переменные, передаваемые в параметры метода guessANumber произвольны.

Совет: Вывод значений переменных в консоль – это отличный способ установить, что в вашей игре или приложении пошло не так и найти баги и ошибки.

В следующем уроке изучим такую вещь, как перегрузка методов. После чего улучшим наше приложение-игру, используя наши новые знания о программировании.

Код для этого урока можно скачать ниже.

Скачать исходники