1

我想对存储在数组中的数据进行算术运算。
用户可以选择随机列并对其进行随机操作。
喜欢,

String DataTmp[10][3] = ...;
String strCalc = "Float.parseFloat(DataTmp[i][0]) + Float.parseFloat(DataTmp[i][2]) * Float.parseFloat(DataTmp[i][1])";

有什么办法可以做到这一点?

编辑: 例如上面提到的计算。这不是固定的计算。无论如何它可能会改变,例如,

String strCalc = "Float.parseFloat(DataTmp[i][1]) / Float.parseFloat(DataTmp[i][2])";

或者

String strCalc = "(Float.parseFloat(DataTmp[i][2]) - Float.parseFloat(DataTmp[i][1])) / Float.parseFloat(DataTmp[i][1])";

所以我不能只做动态计算。我需要在字符串中执行表达式。

进一步编辑:

用户有一个文本框来输入计算。
因此,用户将输入“(字段 1 - 字段 3)/字段 2”之类的内容或任何他们希望的内容。
我需要从数组中获取相应的字段值,并根据用户的选择应用操作(+、-、*、/)。
此表达式中的所有内容都是动态的,包括字段顺序和操作。




已实施的解决方案: 这是我达成的长期可能的解决方案。如果您有任何改进,请添加。我没有实现基于括号的计算层次结构。

              strCalc = strCalc.replace("(", "");
              strCalc = strCalc.replace(")", "");

              List<String> calcList = new ArrayList<String>(Arrays.asList(strCalc
                          .split(" ")));
              showInfo("List Size : " + calcList.size());
              // Doing multiplication and division first
              for (int i = 0; i < calcList.size(); i++) {
                    String curStr = calcList.get(i);
                    if (curStr.compareTo("*") == 0) {
                          float val1 = Float.parseFloat(calcList.get(i - 1));
                          float val2 = Float.parseFloat(calcList.get(i + 1));
                          calcList.remove(i - 1);
                          calcList.remove(i - 1);
                          calcList.remove(i - 1);
                          float result = val1 * val2;
                          calcList.add(i - 1, "" + result);
                          i--;
                          continue;
                    }
                    if (curStr.compareTo("/") == 0) {
                          float val1 = Float.parseFloat(calcList.get(i - 1));
                          float val2 = Float.parseFloat(calcList.get(i + 1));
                          calcList.remove(i - 1);
                          calcList.remove(i - 1);
                          calcList.remove(i - 1);
                          float result = val1 / val2;
                          calcList.add(i - 1, "" + result);
                          i--;
                          continue;
                    }
              }
              // Doing addition and subtraction next
              for (int i = 0; i < calcList.size(); i++) {
                    String curStr = calcList.get(i);
                    if (curStr.compareTo("+") == 0) {
                          float val1 = Float.parseFloat(calcList.get(i - 1));
                          float val2 = Float.parseFloat(calcList.get(i + 1));
                          calcList.remove(i - 1);
                          calcList.remove(i - 1);
                          calcList.remove(i - 1);
                          float result = val1 + val2;
                          calcList.add(i - 1, "" + result);
                          i--;
                          continue;
                    }
                    if (curStr.compareTo("-") == 0) {
                          float val1 = Float.parseFloat(calcList.get(i - 1));
                          float val2 = Float.parseFloat(calcList.get(i + 1));
                          calcList.remove(i - 1);
                          calcList.remove(i - 1);
                          calcList.remove(i - 1);
                          float result = val1 - val2;
                          calcList.add(i - 1, "" + result);
                          i--;
                          continue;
                    }
              }
              return calcList.get(0);
4

2 回答 2

0

您选择的方式应该有效

float result = Float.parseFloat(DataTmp[i][0]) + Float.parseFloat(DataTmp[i][2]) * Float.parseFloat(DataTmp[i][1]);
String strCalc = String.valueOf(result);

但是您需要小心:确保您的DataTmp数组中确实有浮点数(通过在执行操作之前检查它们),并且您可能还想为结果添加一些格式。

于 2011-11-16T16:44:15.667 回答
0

索引 DataTmp 数组中的随机列和行,然后进行计算。由于您使用的是字符串数组,因此请确保您正确投射。

于 2011-11-16T16:45:06.713 回答