从使用Linked List计算的操作发出返回值

时间:2013-10-28 15:35:56

标签: java list linked-list

我目前正在处理用于将字符串解析为链表的代码,并使用该列表作为计算操作的方法。如图所示,我将操作字符串设置为“1 + 2”,运行时返回整数0.

非常感谢所有帮助。

import java.awt.Dimension;
import java.util.LinkedList;
import java.util.List;


public class LinkedListCalculator {

static List<String> CalcInput = new LinkedList<String>();
static String operation = "1+2";
static int equationLength = operation.length();
static int result = 0;
static int num = 0;
static int mul = 1;
static int finalNum = 0;
static char lastOperator = 0;


public static void addToList() {
    String finalNumString;
    if (lastOperator == '+') {
        finalNumString = Integer.toString(finalNum);
        CalcInput.add(finalNumString);
        CalcInput.add("+");
    } else if (lastOperator == '-') {
        finalNumString = Integer.toString(finalNum);
        CalcInput.add(finalNumString);
        CalcInput.add("-");
    } else if (lastOperator == '*') {
        finalNumString = Integer.toString(finalNum);
        CalcInput.add(finalNumString);
        CalcInput.add("*");
    } else if (lastOperator == '/') {
        finalNumString = Integer.toString(finalNum);
        CalcInput.add(finalNumString);
        CalcInput.add("/");
    }
}

public static void computeList() {
    int size = CalcInput.size();
    String lastIndex = null;
    for (int i = 0; i > size; i++) {
        String currentIndex = CalcInput.get(i);
            if (i > 0) {
                lastIndex = CalcInput.get(i - 1);
            }

            if (currentIndex == "+") {
                int lastIndexInt = Integer.valueOf(lastIndex);
                result += lastIndexInt;
            }
            if (currentIndex == "-") {
                int lastIndexInt = Integer.valueOf(lastIndex);
                result -= lastIndexInt;
            }
            if (currentIndex == "*") {
                int lastIndexInt = Integer.valueOf(lastIndex);
                result *= lastIndexInt;
            }
            if (currentIndex == "/") {
                int lastIndexInt = Integer.valueOf(lastIndex);
                result /= lastIndexInt;
            }
    }

}

public static void main(String [] args) {
    for (int currEqnCharNdx = 0; currEqnCharNdx < equationLength ; currEqnCharNdx++) {
        char j = operation.charAt(currEqnCharNdx);

        if (j >= '0' && j <= '9') {
            num = j - '0';
            finalNum *= mul;
            finalNum += num;
            mul = 10;
        } else if (operation.charAt(currEqnCharNdx) == '+') {
            addToList();
            lastOperator = '+';
            mul = 1;
            finalNum = 0;
        } else if (operation.charAt(currEqnCharNdx) == '-') {
            addToList();
            lastOperator = '-';
            mul = 1;
            finalNum = 0;
        } else if (operation.charAt(currEqnCharNdx) == '*') {
            addToList();
            lastOperator = '*';
            mul = 1;
            finalNum = 0;
        } else if (operation.charAt(currEqnCharNdx) == '/') {
            addToList();
            lastOperator = '/';
            mul = 1;
            finalNum = 0;
        } 
    }
    int i = CalcInput.size();
    computeList();
    System.out.println("result: " + result);
}
}

1 个答案:

答案 0 :(得分:0)

您的代码有很多错误。以下是一些错误指示:

String lastIndex = null;
    for (int i = 0; i > size; i++) {

这将永远不会执行(更改为i&lt; size)

我还怀疑addToList()应该在设置lastOperator之后发生等等。

 else if (operation.charAt(currEqnCharNdx) == '+') {
                addToList();
                lastOperator = '+';
                mul = 1;
                finalNum = 0;
            }

此外,这里(在addToList()中):

if (lastOperator == '+') {
        finalNumString = Integer.toString(finalNum);
        CalcInput.add(finalNumString);
        CalcInput.add("+");
    }

你添加了最后一个数字加上+号,但是之后没有任何东西会导致2被添加,所以当它在最后总结时(如果你修复了我提到的其他东西)它将总和1+结果为1(而不是1 + 2使得3)。

以下是输出1的代码(参见上面的最后一点),以便OP重现:

import java.awt.Dimension;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;


public class LinkedListCalculator {

static List<String> CalcInput = new LinkedList<String>();
static String operation = "1+2";
static int equationLength = operation.length();
static int result = 0;
static int num = 0;
static int mul = 1;
static int finalNum = 0;
static char lastOperator = 0;


public static void addToList() {
    String finalNumString;
    if (lastOperator == '+') {
        finalNumString = Integer.toString(finalNum);
        CalcInput.add(finalNumString);
        CalcInput.add("+");
    } else if (lastOperator == '-') {
        finalNumString = Integer.toString(finalNum);
        CalcInput.add(finalNumString);
        CalcInput.add("-");
    } else if (lastOperator == '*') {
        finalNumString = Integer.toString(finalNum);
        CalcInput.add(finalNumString);
        CalcInput.add("*");
    } else if (lastOperator == '/') {
        finalNumString = Integer.toString(finalNum);
        CalcInput.add(finalNumString);
        CalcInput.add("/");
    }
}

public static void computeList() {
    int size = CalcInput.size();
    String lastIndex = null;
    for (int i = 0; i < size; i++) {
        String currentIndex = CalcInput.get(i);
            if (i > 0) {
                lastIndex = CalcInput.get(i - 1);
            }

            if (currentIndex == "+") {
                int lastIndexInt = Integer.valueOf(lastIndex);
                result += lastIndexInt;
            }
            if (currentIndex == "-") {
                int lastIndexInt = Integer.valueOf(lastIndex);
                result -= lastIndexInt;
            }
            if (currentIndex == "*") {
                int lastIndexInt = Integer.valueOf(lastIndex);
                result *= lastIndexInt;
            }
            if (currentIndex == "/") {
                int lastIndexInt = Integer.valueOf(lastIndex);
                result /= lastIndexInt;
            }
    }

}

public static void main(String [] args) {



    for (int currEqnCharNdx = 0; currEqnCharNdx < equationLength ; currEqnCharNdx++) {
        char j = operation.charAt(currEqnCharNdx);

        if (j >= '0' && j <= '9') {
            num = j - '0';
            finalNum *= mul;
            finalNum += num;
            mul = 10;
        } else if (operation.charAt(currEqnCharNdx) == '+') {

            lastOperator = '+';
            addToList();
            mul = 1;
            finalNum = 0;
        } else if (operation.charAt(currEqnCharNdx) == '-') {
            addToList();
            lastOperator = '-';
            mul = 1;
            finalNum = 0;
        } else if (operation.charAt(currEqnCharNdx) == '*') {
            addToList();
            lastOperator = '*';
            mul = 1;
            finalNum = 0;
        } else if (operation.charAt(currEqnCharNdx) == '/') {
            addToList();
            lastOperator = '/';
            mul = 1;
            finalNum = 0;
        } 
    }
    int i = CalcInput.size();
    computeList();
    System.out.println("result: " + result);
}
}