好在我的应用程序中的计算是这样的。
有一个edittext框,其中来自用户的输入(数字)被解析为int的nos。
根据输入,将出现另外两组edittext框。
如果为3,则出现arrayOfEditText的3个编辑文本和arrayOfEditText1的3个编辑文本。
并在这些编辑文本集中输入的值将用于计算。
下面是不完整的Java代码。
calculate.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
// TODO Auto-generated method stub
chk();
}
});
}
public void chk() {
EditText[] arrayOfEditText = new EditText[11];
arrayOfEditText[1] = ((EditText)findViewById(R.id.EditText01));
arrayOfEditText[2] = ((EditText)findViewById(R.id.EditText02));
arrayOfEditText[3] = ((EditText)findViewById(R.id.EditText03));
arrayOfEditText[4] = ((EditText)findViewById(R.id.EditText04));
arrayOfEditText[5] = ((EditText)findViewById(R.id.EditText05));
arrayOfEditText[6] = ((EditText)findViewById(R.id.EditText06));
arrayOfEditText[7] = ((EditText)findViewById(R.id.EditText07));
arrayOfEditText[8] = ((EditText)findViewById(R.id.EditText08));
arrayOfEditText[9] = ((EditText)findViewById(R.id.EditText09));
arrayOfEditText[10] = ((EditText)findViewById(R.id.EditText10));
EditText[] arrayOfEditText1 = new EditText[11];
arrayOfEditText1[1] = ((EditText)findViewById(R.id.EditText11));
arrayOfEditText1[2] = ((EditText)findViewById(R.id.EditText12));
arrayOfEditText1[3] = ((EditText)findViewById(R.id.EditText13));
arrayOfEditText1[4] = ((EditText)findViewById(R.id.EditText14));
arrayOfEditText1[5] = ((EditText)findViewById(R.id.EditText15));
arrayOfEditText1[6] = ((EditText)findViewById(R.id.EditText16));
arrayOfEditText1[7] = ((EditText)findViewById(R.id.EditText17));
arrayOfEditText1[8] = ((EditText)findViewById(R.id.EditText18));
arrayOfEditText1[9] = ((EditText)findViewById(R.id.EditText19));
arrayOfEditText1[10] = ((EditText)findViewById(R.id.EditText20));
for(int i=1;i<=nos;i++)
{
if(arrayOfEditText[i].getText().toString().equals("")||arrayOfEditText1[i].getText().toString().equals(""))
{
Toast.makeText(getApplicationContext(), "Dont leave points empty", 0).show();
}
else
{
calcul();
}
} } public void calcul() { EditText[] arrayOfEditText = new EditText[11];
arrayOfEditText[1] = ((EditText)findViewById(R.id.EditText01));
arrayOfEditText[2] = ((EditText)findViewById(R.id.EditText02));
arrayOfEditText[3] = ((EditText)findViewById(R.id.EditText03));
arrayOfEditText[4] = ((EditText)findViewById(R.id.EditText04));
arrayOfEditText[5] = ((EditText)findViewById(R.id.EditText05));
arrayOfEditText[6] = ((EditText)findViewById(R.id.EditText06));
arrayOfEditText[7] = ((EditText)findViewById(R.id.EditText07));
arrayOfEditText[8] = ((EditText)findViewById(R.id.EditText08));
arrayOfEditText[9] = ((EditText)findViewById(R.id.EditText09));
arrayOfEditText[10] = ((EditText)findViewById(R.id.EditText10));
EditText[] arrayOfEditText1 = new EditText[11];
arrayOfEditText1[1] = ((EditText)findViewById(R.id.EditText11));
arrayOfEditText1[2] = ((EditText)findViewById(R.id.EditText12));
arrayOfEditText1[3] = ((EditText)findViewById(R.id.EditText13));
arrayOfEditText1[4] = ((EditText)findViewById(R.id.EditText14));
arrayOfEditText1[5] = ((EditText)findViewById(R.id.EditText15));
arrayOfEditText1[6] = ((EditText)findViewById(R.id.EditText16));
arrayOfEditText1[7] = ((EditText)findViewById(R.id.EditText17));
arrayOfEditText1[8] = ((EditText)findViewById(R.id.EditText18));
arrayOfEditText1[9] = ((EditText)findViewById(R.id.EditText19));
arrayOfEditText1[10] = ((EditText)findViewById(R.id.EditText20));
for(i=1;i<=nos;i++)
{
//perform calculation
} }
现在要在// perform计算区域中执行的逻辑是
arrayofedittext [1] * arrayofedittext1 [1] + arrayofedittext [2] * arrayofedittext1 [2] + arrayofedittext [3] * arrayofedittext1 [3] +基于nos / arrayofedittext [1] + arrayofedittext [2] + arrayofedittext [3] +等基于编号
有人可以帮我完成此编码吗? :)
最佳答案
执行相同操作的时间越短,应用程序运行速度就越快。因此,使EditText[] arrayOfEditText
和EditText[] arrayOfEditText1
类作用域变量,在onCreate()中定义一次,然后不必在R.id.EditText**
上使用findViewById()。
这是一个检查计算中是否有任何行为空的函数,如果不是,则total
将具有所需的内容。
public void calculateTotal() {
String first;
String second;
double firstNum;
double numerator = 0;
double denominator = 0;
// This loops counts from nos down to 1. It checks for empty strings and
// sums up the numerator and denominator along the way.
for(int index = nos; index > 0; index--) {
first = arrayOfEditText[index].getText().toString();
second = arrayOfEditText1[index].getText().toString();
if(first.isEmpty() || second.isEmpty()) {
Toast.makeText(getApplicationContext(), "Dont leave any points empty (" + (index + 1) + ")", Toast.LENGTH_LONG).show();
return; // Invalid input, warn user and bail out of function!
}
firstNum = Double.parseDouble(first);
numerator += firstNum * Double.parseDouble(second);
denominator += firstNum;
}
// Do something with total
double total = numerator / denominator;
}
更细的点
将
arrayOfEditText
和arrayOfEditText1
定义为对整个类可见,如下所示:public class Example extends Activity {
EditText[] arrayOfEditText = new EditText[11];
EditText[] arrayOfEditText1 = new EditText[11];
...
@Override
public void onCreate(Bundle savedInstanceState)
{
...
arrayOfEditText[1] = (EditText) findViewById(R.id.EditText01);
etc, etc...
您应该知道数组是零索引列表。因此,数组中的第一个条目(
arrayOfEditText
和arrayOfEditText1
)为null,如果您尝试引用arrayOfEditText[0]
并期望EditText会使您的应用崩溃。最后,此代码假定每个EditText都是有效的Double,如果您不限制非数字条目,则添加检查非常简单。