Android中的字符串计算器

时间:2016-10-24 22:15:56

标签: android string

我正在尝试在Android中创建字符串计算器,这是我的功能;

public void hesapla(View view) {

    islemString = Islem.getText().toString();

    List<String> operatorList = new ArrayList<String>();
    List<String> operandList = new ArrayList<String>();
    StringTokenizer st = new StringTokenizer(islemString, "+-*/()", true);

    while (st.hasMoreTokens()) {
        String token = st.nextToken();

        if ("+-/*()".contains(token)) {
            operatorList.add(token);
        } else {
            operandList.add(token);
        }
    }
    for(int i=0; i>=20; i++) {
        if (operatorList.get(i) == "(") {
            int a=0;
            while(operatorList.get(a) == ")"){

                if(operatorList.get(a+1) == "+"){
                    sonucDouble = Double.parseDouble(String.valueOf(operandList.get(i))) + Double.parseDouble(String.valueOf(operandList.get(i+1)));
                }

                if(operatorList.get(a+1) == "-"){
                    sonucDouble = Double.parseDouble(String.valueOf(operandList.get(i))) - Double.parseDouble(String.valueOf(operandList.get(i+1)));
                }

                if(operatorList.get(a+1) == "*"){
                    sonucDouble = Double.parseDouble(String.valueOf(operandList.get(i))) * Double.parseDouble(String.valueOf(operandList.get(i+1)));
                }

                if(operatorList.get(a+1) == "/"){
                    sonucDouble = Double.parseDouble(String.valueOf(operandList.get(i))) / Double.parseDouble(String.valueOf(operandList.get(i+1)));
                }
                a++;
            }
        }
    }

当点击Calculate按钮时,我得到List和operator的操作数以列出每一个。但我不能再读了。

if (operatorList.get(i) == "(")

我正在尝试这个,但我的错在哪里?我怎么能?谢谢。

3 个答案:

答案 0 :(得分:4)

Java/Android对象比较中应使用equals()而不是==(作为避免NullPointerException的最佳做法),在比较String时首先使用常量。 / p>

示例:

if ("(".equals(operatorList.get(i)))

答案 1 :(得分:1)

你有永远不会执行的for循环

for(int i=0; i>=20; i++) {
    if (operatorList.get(i) == "(") {

您从i=0开始,循环的条件是i>=20,这不是真的。尝试

for(int i=0; i<=20; i++) {
    if (operatorList.get(i) == "(") {

然后看看你的代码是否向前发展

答案 2 :(得分:0)

我认为在比较String时需要更改代码,

if (operatorList.get(i).equals("(")))

其他

也有变化