java - Android计算器应用程序阻止相邻的运算符(operator)输入

标签 java android calculator

我正在尝试构建一个安卓计算器应用程序。我正在尝试使用按钮创建一个类似于“351+193*123”的字符串。为了防止语法错误,我必须排除相邻的运算符和小数点(+、-、*、/、.)。但是当我测试应用程序时,仍然可以输入双运算符。请看一下 private Button.onClicklistener -> switch(v.getId()) -> case btnPlus, btnMinus, btnTimes, btnDivide, btnDot

package com.example.calculator;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class CalculatorActivity extends Activity {
    private EditText edtShow;
    private Button btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9,
    btnPlus, btnMinus, btnTimes, btnDivide, btnEquals, btnDot, btnClear, btnBack;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.calculator);
        edtShow = (EditText)findViewById(R.id.edtShow);
        btn0 = (Button)findViewById(R.id.btn0);
        btn1 = (Button)findViewById(R.id.btn1);
        btn2 = (Button)findViewById(R.id.btn2);
        btn3 = (Button)findViewById(R.id.btn3);
        btn4 = (Button)findViewById(R.id.btn4);
        btn5 = (Button)findViewById(R.id.btn5);
        btn6 = (Button)findViewById(R.id.btn6);
        btn7 = (Button)findViewById(R.id.btn7);
        btn8 = (Button)findViewById(R.id.btn8);
        btn9 = (Button)findViewById(R.id.btn9);
        btnPlus = (Button)findViewById(R.id.btnPlus);
        btnMinus = (Button)findViewById(R.id.btnMinus);
        btnTimes = (Button)findViewById(R.id.btnTimes);
        btnDivide = (Button)findViewById(R.id.btnDivide);
        btnEquals = (Button)findViewById(R.id.btnEquals);
        btnDot = (Button)findViewById(R.id.btnDot);
        btnClear = (Button)findViewById(R.id.btnClear);
        btnBack = (Button)findViewById(R.id.btnBack);

        btn0.setOnClickListener(myListner);
        btn1.setOnClickListener(myListner);
        btn2.setOnClickListener(myListner);
        btn3.setOnClickListener(myListner);
        btn4.setOnClickListener(myListner);
        btn5.setOnClickListener(myListner);
        btn6.setOnClickListener(myListner);
        btn7.setOnClickListener(myListner);
        btn8.setOnClickListener(myListner);
        btn9.setOnClickListener(myListner);
        btnPlus.setOnClickListener(myListner);
        btnMinus.setOnClickListener(myListner);
        btnTimes.setOnClickListener(myListner);
        btnDivide.setOnClickListener(myListner);
        btnEquals.setOnClickListener(myListner);
        btnDot.setOnClickListener(myListner);
        btnClear.setOnClickListener(myListner);
        btnBack.setOnClickListener(myListner);
    }

    private Button.OnClickListener myListner = new Button.OnClickListener()
    {
        public void onClick (View v)
        {
            String s = edtShow.getText().toString();
            switch (v.getId())
            {
                case R.id.btn0:
                {
                    if(s.length() != 0)
                        {
                        edtShow.setText(s + 0);
                        }
                    break;
                }
                case R.id.btn1:
                {
                    edtShow.setText(s + 1);
                    break;
                }
                case R.id.btn2:
                {
                    edtShow.setText(s + 2);
                    break;
                }
                case R.id.btn3:
                {
                    edtShow.setText(s + 3);
                    break;
                }
                case R.id.btn4:
                {
                    edtShow.setText(s + 4);
                    break;
                }
                case R.id.btn5:
                {
                    edtShow.setText(s + 5);
                    break;
                }
                case R.id.btn6:
                {
                    edtShow.setText(s + 6);
                    break;
                }
                case R.id.btn7:
                {
                    edtShow.setText(s + 7);
                    break;
                }
                case R.id.btn8:
                {
                    edtShow.setText(s + 8);
                    break;
                }
                case R.id.btn9:
                {
                    edtShow.setText(s + 9);
                    break;
                }
                case R.id.btnPlus:
                {
                    if(s.substring(s.length() - 1) != "+" 
                        && s.substring(s.length() - 1) != "-"
                        && s.substring(s.length() - 1) != "*"
                        && s.substring(s.length() - 1) != "/"
                        && s.substring(s.length() - 1) != ".")
                    {
                        edtShow.setText(s + s.substring(s.length() - 1));
                    }
                    break;
                }
                case R.id.btnMinus:
                {
                    if(s.substring(s.length() - 1) != "+" 
                        && s.substring(s.length() - 1) != "-"
                        && s.substring(s.length() - 1) != "*"
                        && s.substring(s.length() - 1) != "/"
                        && s.substring(s.length() - 1) != ".")
                    {
                        edtShow.setText(s + "-");
                    }
                    break;
                }
                case R.id.btnTimes:
                {
                    if(s.substring(s.length() - 1) != "+" 
                        && s.substring(s.length() - 1) != "-"
                        && s.substring(s.length() - 1) != "*"
                        && s.substring(s.length() - 1) != "/"
                        && s.substring(s.length() - 1) != ".")
                    {
                        edtShow.setText(s + "*");
                    }
                    break;
                }
                case R.id.btnDivide:
                {
                    if(s.substring(s.length() - 1) != "+" 
                        && s.substring(s.length() - 1) != "-"
                        && s.substring(s.length() - 1) != "*"
                        && s.substring(s.length() - 1) != "/"
                        && s.substring(s.length() - 1) != ".")
                    {
                        edtShow.setText(s + "/");
                    }
                    break;
                }
                case R.id.btnDot:
                {
                    if(s.substring(s.length() - 1) != "+" 
                        && s.substring(s.length() - 1) != "-"
                        && s.substring(s.length() - 1) != "*"
                        && s.substring(s.length() - 1) != "/"
                        && s.substring(s.length() - 1) != ".")
                    {
                        edtShow.setText(s + ".");
                    }
                    break;
                }
                case R.id.btnClear:
                {
                    edtShow.setText("");
                    break;
                }
                case R.id.btnBack:
                {
                    edtShow.setText(s.substring(0, s.length() - 1));
                    break;
                }
                case R.id.btnEquals:
                {

                    break;
                }
            }
        }
    };

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.calculator, menu);
        return true;
    }

}

最佳答案

您正在将字符串与 != 进行比较。这不是 Java 的方式——Java 没有运算符重载。你应该使用 string.equals,像这样:

if(!s.substring(0, s.length()-1).equals("+")) ...

也就是说,您的代码可能需要一些清理。所有数字按钮都是相同的,所有运算符(operator)按钮都是相同的 - 将它们分组并有两个事件处理程序 - 每种类型一个。您不需要为每个都使用大的 switch 语句,只需使用 View 的标签来保存数字或运算符。

关于java - Android计算器应用程序阻止相邻的运算符(operator)输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17476491/

相关文章:

java - Tomcat 8 不响应提供静态内容

java - C++ 如何访问从 Java 移植的嵌套类

java - 为什么从 0x0000 到 0xFFFF 的一些 int 不是定义的 unicode 字符

css - 计算器屏幕上的大数字超出了边界

java - 让 Java 应用程序从命令提示符自行运行?

java - OnCheckChangeListener 在自定义适配器中不起作用

java - android-maven-plugin debug 永远等待调试器

java - 如何使形状在我自己的 XML 文件中定义的按钮显示为可点击?

python - 我尝试创建一个面积计算器,它不断指出正确代码的语法无效

python - Python 3-计算器错误处理