我有一个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];
}
}
答案 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 );
}