Простой калькулятор для Android

#java #android #textview #calculator

#java #Android #просмотр текста #калькулятор

Вопрос:

Я новичок в разработке приложений для Android, и я работаю над простым калькулятором. введите описание изображения здесь

The MainActivity.java файл выглядит следующим образом-

 public class MainActivity extends Activity implements OnClickListener 
{

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    View add = (Button)findViewById(R.id.Add);
    add.setOnClickListener(this);
    View substract = (Button)findViewById(R.id.Substract);
    substract.setOnClickListener(this);
    View multiply = (Button)findViewById(R.id.Multiply);
    multiply.setOnClickListener(this);
    View divide = (Button)findViewById(R.id.Divide);
    divide.setOnClickListener(this);
    View equals = (Button)findViewById(R.id.Equals);
    equals.setOnClickListener(this);
    //Numbers
    View nu1 = (Button)findViewById(R.id.n1);
    nu1.setOnClickListener(this);
    View nu2 = (Button)findViewById(R.id.n2);
    nu2.setOnClickListener(this);
    View nu3 = (Button)findViewById(R.id.n3);
    nu3.setOnClickListener(this);
    View nu4 = (Button)findViewById(R.id.n4);
    nu4.setOnClickListener(this);
    View nu5 = (Button)findViewById(R.id.n5);
    nu5.setOnClickListener(this);
    View nu6 = (Button)findViewById(R.id.n6);
    nu6.setOnClickListener(this);
    View nu7 = (Button)findViewById(R.id.n7);
    nu7.setOnClickListener(this);
    View nu8 = (Button)findViewById(R.id.n8);
    nu8.setOnClickListener(this);
    View nu9 = (Button)findViewById(R.id.n9);
    nu9.setOnClickListener(this);
    View nu0 = (Button)findViewById(R.id.n0);
    nu0.setOnClickListener(this);
    View ac = (Button)findViewById(R.id.AC);
    ac.setOnClickListener(this);
    View ce = (Button)findViewById(R.id.CE);
    ce.setOnClickListener(this);
    View del = (Button)findViewById(R.id.DEL);
    del.setOnClickListener(this);
    View pnt = (Button)findViewById(R.id.np);
    pnt.setOnClickListener(this);

}

@Override
public void onClick(View v) 
{
    float num1=0,numx=0;
    int choice=0;
    TextView num = (TextView)findViewById(R.id.Number);
    num.setOnClickListener(this);
    switch (v.getId())
    {
        case R.id.Add:
            choice=1;
            numx=num1;
            num1=0;
            num.setText("");
            break;
        case R.id.Substract:
            choice=2;
            numx=num1;
            num1=0;
            num.setText("");
            break;
        case R.id.Multiply:
            choice=3;
            numx=num1;
            num1=0;
            num.setText("");
            break;
        case R.id.Divide:
            choice=4;
            numx=num1;
            num1=0;
            num.setText("");
            break;
        case R.id.Equals:
            switch(choice)
            {
                case 1:
                    num1=numx num1;
                    num.setText("" num1);
                    choice=0;
                    break;
                case 2:
                    num1=num1-numx;
                    num.setText("" num1);
                    choice=0;
                    break;
                case 3:
                    num1=num1*numx;
                    num.setText("" num1);
                    choice=0;
                    break;
                case 4:
                    num1=num1/numx;
                    num.setText("" num1);
                    choice=0;
                    break;
                case 0:
                    num.setText("" num1);
                    choice=0;
                    break;
            }
        case R.id.n1:
            num1=num1*10 1;
            num.setText("" num1);
            System.out.print(num1);
            break;
        case R.id.n2:
            num1=num1*10 2;
            num.setText("" num1);
            break;
        case R.id.n3:
            num1=num1*10 3;
            num.setText("" num1);
            break;
        case R.id.n4:
            num1=num1*10 4;
            num.setText("" num1);
            break;
        case R.id.n5:
            num1=num1*10 5;
            num.setText("" num1);
            break;
        case R.id.n6:
            num1=num1*10 6;
            num.setText("" num1);
            break;
        case R.id.n7:
            num1=num1*10 7;
            num.setText("" num1);
            break;
        case R.id.n8:
            num1=num1*10 8;
            num.setText("" num1);
            break;
        case R.id.n9:
            num1=num1*10 9;
            num.setText("" num1);
            break;
        case R.id.n0:
            num1=num1*10;
            num.setText("" num1);
            break;
    }


}
 

}

Я сталкиваюсь с 2 проблемами-

  1. Если я хочу ввести любое число, превышающее одну цифру, этого не произойдет. Например, если я нажму 53, сначала текстовое представление покажет 5.0, затем 3.0
  2. Во-вторых, все вычисления всегда дают результат 1.0 после нажатия кнопки =

Может кто-нибудь, помогите мне!

Комментарии:

1. не могли бы вы опубликовать XML-код?

Ответ №1:

Почему вы устанавливаете прослушиватель щелчков на num?

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

Комментарии:

1. Итак, это нельзя сделать, реализовав OnClickListener? Я должен вызывать OnClick() для каждой кнопки в методе onCreate?

2. Это можно сделать. Я просто не понимаю, почему вы устанавливаете этот прослушиватель щелчков «num.setOnClickListener (this);». И я указал, что ваши переменные инициализируются каждый раз, когда вы нажимаете btn. например, когда вы нажимаете на равно, выбор будет равен 0

3. Я удалил число. OnClickListener(), это была ошибка. Я понимаю, что вы говорите. Я просто подумал, что использование переключателя в onClick() кажется лучше, чем вызов onClick() для каждой кнопки. Могу ли я в любом случае реализовать onClickLitener, и значения не инициализируются каждый раз? Статический спецификатор или что-то в этом роде?

4. Что он имел в виду под 2-м абзацем, так это переместить эти локальные переменные за пределы метода: поместить float num1=0,numx=0;int choice=0; над @Override protected void onCreate() . Смотрите этот учебник для получения дополнительной информации.

5. Понял …. совершенно глупая ошибка. Я все время забываю, что свойства кодирования Android такие же, как у Java и C ! Большое вам спасибо!

Ответ №2:

Вы должны получить текст для вашего номера textview в случаях переключения (add, sub).Нравится num.getText().toString().

Комментарии:

1. Зачем это нужно? Число сохраняется в num1, и при нажатии кнопки add или любого другого операнда num1 копируется в num x, а num 1 устанавливается равным 0. Итак, в следующий раз при нажатии цифры второе число вводится в num1. И нажатие = добавляет num1 и numx.

2. Число хранится в num1… вы говорите, что число, которое вы вводите в свой textview, хранится в num1 … верно ?? но где этот код??

3. @kgandroid OP прав. Отображается TextView только число, пока эти числа хранятся внутри 2 float переменных. В этом случае нет необходимости использовать num.getText().toString() .