在数组中添加特定数字

时间:2015-05-17 00:03:47

标签: java arrays sum

对于我的项目,我正在创建一个包含多个功能的Excel电子表格。我目前正在尝试实现一种求和算法,该算法接收来自用户的输入并计算用户想要的数组中的总和。

例如,当用户键入控制台时:

A1 = 3

A2 = 2

A3 = 1

A4 =(总和A1 - C1)

每个单元格的单元格都有其受尊重的值,A4将包含A1到C1的总和,在本例中为六。我当前的代码包含单元格A1到C1的值到数组中。这是我正在尝试为我的电子表格实现计算的代码。

public String eval (Sheet sheet) {
        String stuff = string.substring(2, string.length() - 2);
        String [] arr = stuff.split(" ");
        if (arr[0].equals("sum")) {
            Double total = 0.0;
            String alph = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            String tempFirst = arr[1].substring(0, 1);
            String tempSecond = arr[3].substring(0, 1);
            int firstColumn = alph.indexOf(tempFirst);
            int secondColumn = alph.indexOf(tempSecond);
            int firstRow = Integer.valueOf(arr[1].substring(1));
            int secondRow = Integer.valueOf(arr[3].substring(1));
            if (firstColumn == secondColumn) {
                for (int i = firstRow; i <= secondRow; i++) {
                    for (int j = firstColumn; j <= secondColumn; j++) {
                        total += Double.valueOf(sheet.referenceTwo(i, j));

                    }
                }
            }
        } 
        for (int i = 0; i < arr.length; i += 2) {
            arr[i] = sheet.referenceOne(arr[i]);
        }
        Double total = Double.valueOf(arr[0]);
        for (int i = 1; i < arr.length; i += 2) {
            if (arr[i].equals("*")) {
                 total = total * Double.valueOf(arr[i+1]);
            }
            else if (arr[i].equals("+")) {
                total = total + Double.valueOf(arr[i+1]);
            }
            else if (arr[i].equals("-")) {
                total = total - Double.valueOf(arr[i+1]);
            }
            else if (arr[i].equals("/")) {
                total = total / Double.valueOf(arr[i+1]);
            }
        }
        return total + "";
    }

对于我的代码的这部分,它传递用户输入,在这种情况下将是和A1 - C1。然后它将它存储到一个数组中,该数组用空格分隔它。如果数组包含“sum”,它将通过以下代码。它解析A1和C1并获取数组的行和列位置。例如,对于A1,数组中的位置将为(0,0)。然后它将使用我的代码的另一部分中的sheetReferenceTwo方法,该方法返回数组中位置的值。

以下是我的方法的代码,用于计算数组中的信息

public String referenceOne (String location) {
    String temp = location.substring(0, 1);
    int letter = alph.indexOf(temp);
    int num = Integer.valueOf(location.substring(1, 2)) - 1;
    return contents[num][letter].eval(this);

}

public String referenceTwo (int row, int col) {
    return contents[row][col].eval(this);
}

出于某种原因,我得到了一个

线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“u”

它停在Sheet.referenceOne(Sheet.java:41)

我目前仍然坚持要做什么来实现这一点,并希望得到一些建议。

2 个答案:

答案 0 :(得分:0)

if (arr[0].equals("sum")) {
....
for (int i = 0; i < arr.length; i += 2) {
    arr[i] = sheet.referenceOne(arr[i]);
}

参考上述代码,考虑arr[0]等于"sum"的情况。代码将输入传递此值的referenceOne方法:

int num = Integer.valueOf(location.substring(1, 2)) - 1;

这将导致NumberFormatException(它本质上是调用Integer.valueOf("u"))。仅传递您希望传递给referenceOne的相应数组元素。

答案 1 :(得分:0)

您应该考虑编写解析器和正确的表达式求值程序,而不是从输入中选择第一个和第二个字符。我认为你问题的一半并不是处理命令行。

IOW写类,如Token,Variable,Number,Expression等,让它们处理像Spreadsheet这样的对象。