Суббота, 24.02.2018, 14:48
Поиск
Никнэйм
Сертификат на никнейм Olelucoye, зарегистрирован на Тимофеев Константин Михайлович
Зарегистрируй свой никнейм
Обратная связь
olelucoye.tk@yandex.ru
Реклама AdSense
Реклама
Друзья сайта
  • Лига медицинского права
  • Гостиница "Зай"
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » Статьи » Андроид разработка

    Программируем калькулятор на андроид. Урок 2.

    Урок сделан специально для группы http://vk.com/amdroid.developer

    Урок второй. Пишем функционал приложения.

    Для функционала нам понадобятся числовые переменные - operand1, operand2 (для хранения чисел с которыми будут совершаться операции), result (для хранения результата операции) и flagAction (здесь будет храниться код операции).

    Объявляем переменные до метода onCreate:

    int operand1, operand2, flagAction;

    double result;

    Поскольку мы не ввели кнопку ".", работать будем только с целочисленными операндами. Поэтому объявляем их с типом int. А результат может оказаться числом дробным (например, 5/2), поэтому переменная result будет с плавающей запятой типа double.

    В переменной flagAction храним код операции: 0 - нет операции, 1 - сложение, 2- вычитание, 3 - умножение, 4 - деление.

    В методе onCreate проинициализируем переменные нулями:

    operand1 = 0;

    operand2 = 0;

    result = 0;

    flagAction = 0;

    Установим значение первого операнда в текстовое поле:

    tvLCD.setText(Integer.toString(operand1));

    Обратите внимание, что мы передаем в метод setText операнд в виде String.

    Теперь переходим к методу onClick. Действия определяются в зависимости от нажатой кнопки, для этого в операторе switch определяем id нажатой кнопки. Затем для сравниваем его с id всех кнопок. При совпадении выполняем тело соответствующего оператора case.

    Нажатия на цифровые кнопки будем обрабатывать в отдельном методе, в который будем передавать нажатую цифру. Сам метод нужно создавать вручную:

    private void ClickNumber(int num){

                 if(flagAction == 0){

                        operand1 = operand1*10 + num;

                        tvLCD.setText(Integer.toString(operand1));

                 }else{

                        operand2 = operand2*10 + num;

                        tvLCD.setText(Integer.toString(operand2));

                 }

           }

    Здесь мы проверяем flagAction - если он равен нулю, значит изменяем значение первого операнда, если нет, то второго. Затем изменяем значение текстового поля на актуальное значение операнда.

    При нажатии на кнопки действий ( сложение, вычитание, деление, умножение) просто присваиваем flagAction соответствующее значение, если оно еще не присвоено. Обратите внимание, что если значение флага отлично от нуля никаких действий производится не будет.

    При нажатии кнопки "С" присваиваем всем переменным ноль и актуализируем  текстовое поле.

    При нажатии на кнопку равно проверяем значение flagAction и выполняем соответствующую операцию, выводим результат в tvLCD и обнуляем переменные. Если значение flagAction не соответствует ни одному действию сообщаем об этом пользователю.

    switch(flagAction){

                               case 1:

                                      result = operand1 + operand2;

                                      break;

                               case 2:

                                      result = operand1 - operand2;

                                      break;

                               case 3:

                                      result = operand1 * operand2;

                                      break;

                               case 4:

                                      result =(double) operand1 / (double) operand2;

                                      break;

                               default:

                                      Toast.makeText(this, "Операция не задана", Toast.LENGTH_LONG).show();

                        }

    if(flagAction != 0){

                               tvLCD.setText(Double.toString(result));

                               operand1 = 0;

                               operand2 = 0;

                               result = 0;

                               flagAction = 0;

                        }

     

    Вроде все. Можно запускать калькулятор на эмуляторе. Возможности его, конечно, до полнофункционального калькулятора не дотягивают, но для демонстрации работы кода достаточно.

    Оговорюсь сразу, я не вводил никаких проверок на ошибки, чтобы не загромождать код. Например, если попробовать ввести очень большое число, в текстовом поле будут отображаться неадекватные числа. Это происходит из-за ограничения длины переменной типа int четырьмя байтами. При переполнении разрядности система отбрасывает лишние разряды до длины в 4 байта и присваивает полученное число переменной. При написании приложения разработчик должен учесть такие ошибки и пресечь их возникновение.

    Программируем калькулятор на андроид. Урок 10.

    Программируем калькулятор на андроид. Урок 9.

    Программируем калькулятор на андроид. Урок 8.

    Программируем калькулятор на андроид. Урок 7.

    Программируем калькулятор на андроид. Урок 6.

    Программируем калькулятор на андроид. Урок 5.

    Программируем калькулятор на андроид. Урок 4.

    Программируем калькулятор на андроид. Урок 3.

    Программируем калькулятор на андроид. Урок 1.

    В макете ничего не менялось поэтому привожу только код MainActivity.java

    package ru.urok.super_calc;

    import android.app.Activity;

    import android.os.Bundle;

    import android.view.Menu;

    import android.view.MenuItem;

    import android.view.View;

    import android.view.View.OnClickListener;

    import android.widget.Button;

    import android.widget.TextView;

    import android.widget.Toast;

     

    public class MainActivity extends Activity implements OnClickListener {

          

           //объявляем кнопки и текстовое поле

           Button btOne, btTwo, btThree, btFour, btFive;

           Button btSix, btSeven, btEight, btNine, btZero;

           Button btPlus, btMinus, btMulti, btDiv, btEqual, btClear;

           TextView tvLCD;

           //объявляем переменные для вычислений

           int operand1, operand2, flagAction;

           double result;

          

           @Override

           protected void onCreate(Bundle savedInstanceState) {

                 super.onCreate(savedInstanceState);

                 setContentView(R.layout.activity_main);

                

                 //связываем кнопки с макетом

                 btOne = (Button) findViewById(R.id.btOne);

                 btTwo = (Button) findViewById(R.id.btTwo);

                 btThree = (Button) findViewById(R.id.btThree);

                 btFour = (Button) findViewById(R.id.btFour);

                 btFive = (Button) findViewById(R.id.btFive);

                 btSix = (Button) findViewById(R.id.btSix);

                 btSeven = (Button) findViewById(R.id.btSeven);

                 btEight = (Button) findViewById(R.id.btEight);

                 btNine = (Button) findViewById(R.id.btNine);

                 btZero = (Button) findViewById(R.id.btZero);

                 btPlus = (Button) findViewById(R.id.btPlus);

                 btMinus = (Button) findViewById(R.id.btMinus);

                 btMulti = (Button) findViewById(R.id.btMulti);

                 btDiv = (Button) findViewById(R.id.btDiv);

                 btEqual = (Button) findViewById(R.id.btEqual);

                 btClear = (Button) findViewById(R.id.btClear);

                 tvLCD = (TextView) findViewById(R.id.tvLCD);

                 //назначаем кнопкам слушателя

                 btOne.setOnClickListener(this);

                 btTwo.setOnClickListener(this);

                 btThree.setOnClickListener(this);

                 btFour.setOnClickListener(this);

                 btFive.setOnClickListener(this);

                 btSix.setOnClickListener(this);

                 btSeven.setOnClickListener(this);

                 btEight.setOnClickListener(this);

                 btNine.setOnClickListener(this);

                 btZero.setOnClickListener(this);

                 btPlus.setOnClickListener(this);

                 btMinus.setOnClickListener(this);

                 btMulti.setOnClickListener(this);

                 btDiv.setOnClickListener(this);

                 btClear.setOnClickListener(this);

                 btEqual.setOnClickListener(this);

                

                 //инициализируем переменные

                 operand1 = 0;

                 operand2 = 0;

                 result = 0;

                 flagAction = 0;

                 //Установим значение первого операнда в текстовое поле

                 tvLCD.setText(Integer.toString(operand1));                   

           }

     

           @Override

           public boolean onCreateOptionsMenu(Menu menu) {

                 // Inflate the menu; this adds items to the action bar if it is present.

                 getMenuInflater().inflate(R.menu.main, menu);

                 return true;

           }

     

           @Override

           public boolean onOptionsItemSelected(MenuItem item) {

                 // Handle action bar item clicks here. The action bar will

                 // automatically handle clicks on the Home/Up button, so long

                 // as you specify a parent activity in AndroidManifest.xml.

                 int id = item.getItemId();

                 if (id == R.id.action_settings) {

                        return true;

                 }

                 return super.onOptionsItemSelected(item);

           }

     

           @Override

           public void onClick(View v) {

                 switch(v.getId()){

                 case R.id.btOne:

                        ClickNumber(1);

                        break;

                 case R.id.btTwo:

                        ClickNumber(2);

                        break;

                 case R.id.btThree:

                        ClickNumber(3);

                        break;

                 case R.id.btFour:

                        ClickNumber(4);

                        break;

                 case R.id.btFive:

                        ClickNumber(5);

                        break;

                 case R.id.btSix:

                        ClickNumber(6);

                        break;

                 case R.id.btSeven:

                        ClickNumber(7);

                        break;

                 case R.id.btEight:

                        ClickNumber(8);

                        break;

                 case R.id.btNine:

                        ClickNumber(9);

                        break;

                 case R.id.btZero:

                        ClickNumber(0);

                        break;

                 case R.id.btPlus:

                        if(flagAction == 0)flagAction = 1;

                        break;

                 case R.id.btMinus:

                        if(flagAction == 0)flagAction = 2;

                        break;

                 case R.id.btMulti:

                        if(flagAction == 0)flagAction = 3;

                        break;

                 case R.id.btDiv:

                        if(flagAction == 0)flagAction = 4;

                        break;

                 case R.id.btEqual:

                        switch(flagAction){

                               case 1:

                                      result = operand1 + operand2;

                                      break;

                               case 2:

                                      result = operand1 - operand2;

                                      break;

                               case 3:

                                      result = operand1 * operand2;

                                      break;

                               case 4:

                                      result =(double) operand1 / (double) operand2;

                                      break;

                               default:

                                      Toast.makeText(this, "Операция не задана", Toast.LENGTH_LONG);

                        }

                        if(flagAction != 0){

                               tvLCD.setText(Double.toString(result));

                               operand1 = 0;

                               operand2 = 0;

                               result = 0;

                               flagAction = 0;

                        }

                        break;

                 case R.id.btClear:

                        operand1 = 0;

                        operand2 = 0;

                        result = 0;

                        flagAction = 0;

                        tvLCD.setText(Integer.toString(operand1));

                        break;

                 }

           }

          

           private void ClickNumber(int num){

                 if(flagAction == 0){

                        operand1 = operand1*10 + num;

                        tvLCD.setText(Integer.toString(operand1));

                 }else{

                        operand2 = operand2*10 + num;

                        tvLCD.setText(Integer.toString(operand2));

                 }

           }

    }

    Категория: Андроид разработка | Добавил: Olelucoye (22.11.2014)
    Просмотров: 2877
    | Теги: Калькулятор, java, Android, основной функционал | Рейтинг: 5.0/1
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Меню сайта
    Категории раздела
    Андроид разработка [23]
    libGDX [24]
    Мои андроид проекты [6]
    Excel [7]
    Железяки [5]
    Скрипты в блокноте [4]
    Разное [1]
    Форма входа
    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Яндекс Метрика
    Яндекс.Метрика