我想对存储在Array中的数据进行算术运算。
用户可以选择随机列和随机操作。
像,
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])";
所以我不能只做动态计算。 我需要在String中执行表达式。
进一步编辑:
用户有一个文本框输入计算
因此,用户将输入类似“(字段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);
答案 0 :(得分:0)
您选择的方式应该有效
float result = Float.parseFloat(DataTmp[i][0]) + Float.parseFloat(DataTmp[i][2]) * Float.parseFloat(DataTmp[i][1]);
String strCalc = String.valueOf(result);
但是你需要小心:确保你的DataTmp
数组中确实有浮点数(通过在操作之前检查它们),你可能还想为结果添加一些格式。
答案 1 :(得分:0)
索引DataTmp数组中的随机列和行,然后进行计算。由于您使用的是字符串数组,请确保正确投射。