将混合数组中的值乘以

时间:2015-10-15 16:18:15

标签: java arrays

我有一个String[] formelHolder,其中有Strings(“字”和数字,如H2O )来自UI来源(input此处) 。对于每个“单词”,我从数据库中获取一个值,该数据库被添加到double[] massHolder [double[]]中。现在我想将massHolder[k-1]中的双精度乘以formelHolder[k]中的数字,例如,massHolder H 的值将乘以<来自formelHolder的em> 2 。 到目前为止我试过这个:

btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            double masse = 0.0;
            String formel = textFieldFormel.getText();
            String[] formelHolder = formel.split("(?=[A-Z0-9])");
            double[] massHolder = new double[formelHolder.length];

            for (int i = 0; i < formelHolder.length; i++){
                System.out.println("formelHolder[i]: i="+i+ formelHolder[i]);
                if (formelHolder[i].equals("2")){
                } else {
                    massHolder[i] = Double.parseDouble(dbhandler.getMass(formelHolder[i]));
                    System.out.println("i: "+ i+ " FormelHolder: "+formelHolder[i] +" Masse: "+massHolder[i]);

                    for (int k = 0; k<formelHolder.length; k++){
                        if (formelHolder[k].equals("2")){
                            masse = masse + massHolder[k-1]*Double.parseDouble(formelHolder[k]);
                        } else { 
                            masse = masse + massHolder[k];
                        }
                    }
                    System.out.println("Finally: "+masse);


                }
            }
        }
    });

导致,例如在 HH2 的情况下,其中 H = 1.01 的massHolder ---&gt; abc = 4.04而不是abc = 3.03

formelHolder的内容将是(例如HH2,应该导致3.03而不是4.04):

formelHolder[1] = H
formelHolder[2] = H
formelHolder[3] = 2

massHolder[1] = 1.01
massHolder[2] = 1.01
massHolder[3] -> empty [due to being a number in formelHolder]

当前代码如您的awnser中所示:

for (int k = 0; k<formelHolder.length-1; k++){
                        if (formelHolder[k].matches("\\d+(.\\d+)?")){
                            double masseHolder = Double.parseDouble(formelHolder[k]);
                            masse += massHolder[k-1]*(masseHolder-1);
                        } else { 
                            masse += massHolder[k];
                        }
                    }

1 个答案:

答案 0 :(得分:1)

这应该有用,但请参见下文。

double abc = 0.0;
for (int k = 0; k < formelHolder.length - 1; k++){

   if (formelHolder[k].matches("\\d+(\\.\\d+)?")){
      double f = Double.parseDouble(formelHolder[k]);
      abc += massHolder[k-1]*(f-1);
   } else {
      abc += massHolder[k];
   }
}

我只是为所有非数字条目添加数值。对于数字输入,我将系数转换为减去一(!)并乘以前一个索引处的数值。

这假设两个数组并行使用。如果massHolder中的massHolder不包含数字值的填充符(null或0),则formelHolder的索引值必须在另一个变量中携带,并且只要从该数组中获取值,就会显式递增。

有一些可能的打嗝。

sArray = new formelHolder[]{ "22", ... }

第一个条目可能不是数字。

sArray = new formelHolder[]{ "H", "3", "2",...}

连续可能没有两个数字。

编辑与OP的代码合并

public static void compute( String formula, double[] values ){
    double masse = 0.0;
    String[] formulaHolder = formula.split("(?=[A-Z0-9])");
    double[] massHolder = new double[formulaHolder.length];

    for (int k = 0; k < formulaHolder.length; k++){
        String form = formulaHolder[k];
        if (form.matches("\\d+")){
            double f = Double.parseDouble(form);
             masse += massHolder[k-1]*(f-1);
        } else {
             massHolder[k] = values[k]; // get the value from the db
             masse += massHolder[k];
        }
    }
    System.out.println( masse );
}