总结以编程方式创建的编辑文本中的所有十进制值

Posted

技术标签:

【中文标题】总结以编程方式创建的编辑文本中的所有十进制值【英文标题】:Sum up all decimal value in programmatically created edit text 【发布时间】:2021-01-24 09:36:19 【问题描述】:

请帮忙,我想创建 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 start, 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) 
            
        );
    

【问题讨论】:

【参考方案1】:

程序逻辑有点错误。只需使用以下代码:

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 的文本字符串是否为空或空白。不过,我不知道这将如何解决您的确切问题。

【讨论】:

以上是关于总结以编程方式创建的编辑文本中的所有十进制值的主要内容,如果未能解决你的问题,请参考以下文章

UITextField 不会以编程方式转换为字符串或采用任何二进制运算符 Xcode

python中的文件操作总结

java输入与输出

在文本框中显示数据库中的十进制值

怎样把文件转换成二进制形式的文本文件?

WCF - 如何使用 HTTP(S) 上的二进制编码以编程方式创建自定义绑定