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])";

だから私はその動的計算を行うことはできません。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);
4

2 に答える 2

0

DataTmp 配列のランダムな列と行にインデックスを付けてから、計算を実行します。文字列配列を使用しているため、正しくキャストしていることを確認してください。

于 2011-11-16T16:45:06.713 に答える
0

あなたが選んだ方法はうまくいくはずです

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

ただし、注意が必要です。実際にDataTmp配列に float があることを確認してください (操作を実行する前にそれらをチェックしてください)。また、結果に書式を追加することもできます。

于 2011-11-16T16:44:15.667 に答える