Deepesh mhatre Ответов: 1

Как избежать числового выражения в android java ?


Я создаю приложение-Калькулятор на android с использованием java,я не хочу использовать тонны операторов if/else для вычисления выражений. Мне было интересно ,есть ли у нас что-то вроде функции Eval (), как и в Javascript для оценки выражения.

У меня есть метод GetResult (), в котором я хотел бы вычислить числовое выражение или вычислить числовое выражение.


Калькулятор кода активности :



package com.deepesh.calculatorx;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class Cal_page extends AppCompatActivity {

    TextView displayer;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cal_page);


        displayer=findViewById(R.id.displayer);
       
    }

    public void Addone(View view) {

        displayer.append("1");
    }

    public void Addtwo(View view) {
        displayer.append("2");
    }

    public void Addthree(View view) {
        displayer.append("3");
    }

    public void Addfour(View view) {
        displayer.append("4");
    }

    public void Addfive(View view) {
        displayer.append("5");
    }

    public void Addsix(View view) {
        displayer.append("6");
    }

    public void Addseven(View view) {
        displayer.append("7");
    }

    public void Addeight(View view) {
        displayer.append("8");
    }

    public void Addnine(View view) {
        displayer.append("9");
    }

    public void Addzero(View view) {
        displayer.append("0");
    }


    public void Addplus(View view) {
        displayer.append("+");
    }

    public void Addsubtract(View view) {
        displayer.append("-");
    }

    public void Addmultiply(View view) {
        displayer.append("*");
    }

    public void AddDivide(View view) {
        displayer.append("/");
    }

    public void AddDot(View view) {
        displayer.append(".");
    }

    public void clearALL(View view){
        displayer.setText(" ");
    }

    public void GetResult(View view) {
   //user presses Equal sign
        //evauluate the numeric expression and get result

    }

    public void clearLastchar(View view) {

        CharSequence numbers = displayer.getText();
        String Snumbers = numbers.toString();

        String Nnumbers = Snumbers.substring(0,Snumbers.length()-1);

        displayer.setText(Nnumbers);

    }
}


Что я уже пробовал:

Я пробовал использовать некоторые внешние Парсеры, но большинство из них устарели и получают ошибки
- и не работают.

Пожалуйста, предложите что-то последнее и только то, что вы использовали.

1 Ответов

Рейтинг:
0

OriginalGriff

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

Вы можете попробовать это: java - как вычислить математическое выражение, заданное в Строковой форме? - переполнение стека[^]

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

Я настоятельно рекомендую вам подумать о написании синтаксического анализатора для проверки синтаксиса выражения и построения дерева выполнения или стека RPN, пока он делает это для оценки, когда он показывает, что он действителен. Затем выполните дерево / стек, чтобы получить свой результат. Вы узнаете гораздо больше о том, как делать вещи, и если ваша цель состоит в том, чтобы стать продвинутым программистом Java, как вы сказали две недели назад, то вам нужно действительно практиковаться в написании кода: Не могли бы вы перечислить мне все необходимые вещи , которые я должен изучить в android, чтобы стать продвинутым или, по крайней мере, хорошим в создании приложений для android ?[^]
Juist захватывает чужой код, обнаруживает, что он по какой-то причине не работает в вашем приложении, и отказ от него-это не лучший способ достичь этой цели.


David Crow

"Я настоятельно рекомендую вам посмотреть на написание синтаксического анализатора, чтобы проверить синтаксис выражения и построить дерево выполнения или стек RPN, пока он делает это для оценки, когда он показывает, что он действителен. Затем выполните дерево / стек, чтобы получить свой результат."

Одно из моих самых любимых заданий, когда я учился в школе.

[no name]

- Эй ! Это отличный совет.Спасибо, чувак.