如何解决汇总以编程方式创建的编辑文本中的所有十进制值
请帮助,我想创建30个编辑文本并获取它们的总和。目前,我能够获得总和,但这仅适用于整数。输入十进制值时,总和不准确。当我删除任何一个编辑文本中的值时,程序崩溃,请提供有关如何防止这种情况的建议。谢谢!
for (int i = 1; i < 31; i++) {
EditText editText = new EditText(this);
editText.setHint("Recording Length: " + "#" + i);
editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
editSampling.addView(editText);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s,int start,int count,int after) {
}
@Override
public void onTextChanged(CharSequence s,int before,int count) {
List<Double> getAverageLength= new ArrayList<Double>();
String text = editText.getText().toString();
double value = Double.parseDouble(text);
getAverageLength.add(value);
double sum = 0;
for (int m = 0; m < getAverageLength.size(); m++)
sum = sum + getAverageLength.get(m) / getAverageLength.size();
String toString = String.valueOf(sum);
avgLength.setText(toString);
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
解决方法
程序逻辑略有错误。只需使用以下代码:
List<Double> getAverageLength = new ArrayList<>();
final EditText avgLength; //or TextView... your choice
for (int i = 0; i < 30; i++) {
getAverageLength.add(0);
EditText editText = new EditText();
editText.setHint("Recording Length: #"+(i+1));
editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
editSampling.addView(editText);
editText.addTextChangedListener(new TextWatcher() {
...
@Override
public void onTextChanged(CharSequence s,int start,int before,int count) {
String text = editText.getText().toString();
double value = 0;
if (text != null && !text.equals("")) {
value = Double.parseDouble(text);
}
getAverageLength.set(i,value);
double sum = 0;
for (int m = 0; m < getAverageLength.size(); m++)
sum += getAverageLength.get(m) / getAverageLength.size();
String toString = String.valueOf(sum);
avgLength.setText(toString);
}
...
});
}
编辑:我忘记指出您代码中的错误。在onTextChanged中,您已经重新初始化了列表,并且仅将当前EditText的读数附加到该列表上。这可能会返回错误的总和。此外,您没有检查EditText的文本字符串是否为空或空白。不过,我看不出如何解决您的确切问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。