繁体   English   中英

简单的安卓计算器应用

[英]Simple android calculator app

我正在尝试制作一个简单的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进行减/乘/除。

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;

不过,请考虑研究“调车场算法”

看起来您的起始结果为0,而不是第一个数字。 因为0 + values.get(i)是i的值,所以加法有效。 您需要先初始化结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM