Java 简单的android计算器应用程序

Java 简单的android计算器应用程序,java,android,math,calculator,Java,Android,Math,Calculator,我正在尝试制作一个简单的android计算器应用程序,我知道它不太好,可能有上百种更好的方法,但这就是它看起来的样子。我需要帮助的是resultBtnClick方法中的减法、乘法和除法。加法部分很简单,我只使用了结果+=。。。在for循环中。那么,如何使堆栈中的数字彼此相减/除/乘呢 public class MainActivity extends AppCompatActivity { TextView tv1; Boolean emptyResult = true; private st

我正在尝试制作一个简单的android计算器应用程序,我知道它不太好,可能有上百种更好的方法,但这就是它看起来的样子。我需要帮助的是resultBtnClick方法中的减法、乘法和除法。加法部分很简单,我只使用了结果+=。。。在for循环中。那么,如何使堆栈中的数字彼此相减/除/乘呢

public class MainActivity extends AppCompatActivity {

TextView tv1;
Boolean emptyResult = true;
private static char operator;
double result, res;

Stack values = new Stack();

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

    tv1 = (TextView) findViewById(R.id.tv1);
}
public void btnClick(View v)
{
    if (!emptyResult)
    {
        tv1.setText("");
        emptyResult = true;
    }
    switch(v.getId())
    {
        case R.id.btn1:
            tv1.setText(tv1.getText() + "1");
            break;
        case R.id.btn2:
            tv1.setText(tv1.getText() + "2");
            break;
        case R.id.btn3:
            tv1.setText(tv1.getText() + "3");
            break;
        case R.id.btn4:
            tv1.setText(tv1.getText() + "4");
            break;
        case R.id.btn5:
            tv1.setText(tv1.getText() + "5");
            break;
        case R.id.btn6:
            tv1.setText(tv1.getText() + "6");
            break;
        case R.id.btn7:
            tv1.setText(tv1.getText() + "7");
            break;
        case R.id.btn8:
            tv1.setText(tv1.getText() + "8");
            break;
        case R.id.btn9:
            tv1.setText(tv1.getText() + "9");
            break;
        case R.id.btn0:
            tv1.setText(tv1.getText() + "0");
            break;
        case R.id.btnDot:
            tv1.setText(tv1.getText() + ".");
            break;
        case R.id.btnClear:
            tv1.setText("");
            emptyResult = true;

            while (!values.isEmpty())
            {
                values.pop();
            }
            break;
    }
}
public void calculateBtnClick(View v)
{
    values.push(tv1.getText());

    switch(v.getId())
    {
        case R.id.btnAdd:
            operator = '+';
            break;
        case R.id.btnSub:
            operator = '-';
            break;
        case R.id.btnMult:
            operator = 'x';
            break;
        case R.id.btnDiv:
            operator = '/';
            break;
    }
    tv1.setText("");
}
public void resultBtnClick(View v)
{
    values.push(tv1.getText());

    switch(operator)
    {
        case '+':
            for (int i=0; i < values.size(); i++)
            {
                result += Double.valueOf(values.get(i).toString());
            }
            break;
        case '-':
            for (int i=0; i < values.size(); i++)
            {
                result -= Double.valueOf(values.get(i).toString());
            }
            break;
        case 'x':
            for (int i=0; i < values.size(); i++)
            {
                result *= Double.valueOf(values.get(i).toString());
            }
            break;
        case '/':
            for (int i=0; i < values.size(); i++)
            {
                result /= Double.valueOf(values.get(i).toString());
            }
            break;
    }
    while (!values.isEmpty())
    {
        values.pop();
    }
    res = ((long)(result * 100000 + 0.5))/100000.0;
    tv1.setText(Double.toString(res));
    result = 0;
    emptyResult = false;
}
}
编辑1:我也知道,我一次只能使用一个操作符,这是最后一次单击的操作符,因此如果我单击:5+6-8x2+4,它将计算为:5+6+8+2+4,这可能需要更多的工作才能将其修复为正常的计算器,因此请帮助我解决上面提到的主要问题,如果有简单的问题,快速解决这个问题,然后欢迎您将其添加到您的答案中,但我会优先考虑主要问题的答案,谢谢


编辑2:乘法和除法没有任何作用,我知道代码是错误的,只是想澄清实际结果是什么。

看起来你的起始结果是0,而不是第一个数字。加法有效,因为0+值。geti是i的值。您需要首先初始化结果

您需要从堆栈中获取第一个值,否则您需要对0进行减法/乘法/除法

result = Double.valueOf(values.get(0)); // Get first, so 'result != 0'
for (int i = 1; i < values.size(); i++) {
    double val = Double.valueOf(values.get(i).toString());
    switch(operator)  {
        case '+':
            result += val;
            break;
        case '-':
            result -= val;
            break;

考虑对调车场算法的研究,尽管

您的错误到底是什么?看看resultBtnClick方法,例如,我如何将堆栈中的所有变量相互减去?如果我输入10-2-5,目前它没有做我想做的事,没有做我想做的事,根本没有描述它到底做了什么和你期望的。如果你开始的结果是0,那么你为什么要做0-10-2-5呢?10是正的@cricket_007当我输入10-2-5时,我得到-16.99999,因此它只是添加负变量,以得出为什么它是-16.99999而不是-17,我不知道=s,因为您使用的是双类型。只要我在计算器上单击=符号,resultBtnClick方法就会运行,因此在计算完成后,它会清除变量结果。我应该用什么来初始化它呢?当结果中还没有任何内容时,你的执行结果-=东西。在循环之前,您需要将结果设置为堆栈底部的第一个数字。然后循环并做减法。我也会注意到上面Cricket关于双重类型不可靠的警告。您可能需要使用数学。在某个点上取整以限制小数。这就是res=longresult*100000+0.5/100000.0;电话是关于。安卓工作室里有数学课吗?当我输入它时,它不工作。