对数组中的元素执行算术运算 - android/java
Posted
技术标签:
【中文标题】对数组中的元素执行算术运算 - android/java【英文标题】:Performing arithmetic operations on the elements in an array - android/java 【发布时间】:2012-06-19 08:36:20 【问题描述】:我的应用程序中的计算是这样的..
有一个编辑文本框,其中来自用户的输入(数字)被解析为 int 为 nos。
根据输入出现另外两组edittext框。
如果 nos 为 3,则出现来自 arrayOfEditText 的 3 个 edittext 和来自 arrayOfEditText1 的 3 个 edittext。 并且在这些编辑文本集中输入的值用于计算。
不完整的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
现在//执行计算区域要执行的逻辑是..
arrayofedittext[1]*arrayofedittext1[1] + arrayofedittext[2]*arrayofedittext1[2] + arrayofedittext[3]*arrayofedittext1[3] + 等基于nos / arrayofedittext[1] + arrayofedittext[2] + arrayofedittext[3] + 等基于nos
那么有人可以帮我完成这个编码吗? :)
【问题讨论】:
【参考方案1】:您执行相同操作的次数越少,您的应用运行速度就越快。所以制作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,如果您不限制非数字条目,那么添加检查非常简单。
【讨论】:
非常感谢.. 成功了!!你的帖子对我很有帮助,谢谢!! :)) 我不太熟悉 android。如果您在 EDITTEXT 中键入任何更改并按下计算。然后会再次创建还是只是点击监听器? @moskito-x link 描述了 Android Activity 的生命周期。简而言之,onCreate() 仅在 Activity 开始时由操作系统调用。每当用户单击calculate
按钮时,OnClickListener 都会调用 calculateTotal()。
@kumareloaded 很高兴我能提供帮助,感谢您的支持并将问题标记为已回答。
对不起。那么arrayOfEditText [x] =
如何填充新的值?【参考方案2】:
创建全局变量
int[] intEditText new int[nos+1];
int[] intEditText1 new int[nos+1];
....
public void chk()
int test=0;
try
for(int i=1;i<=nos+nos;i++)
if (i==1 && ((EditText)findViewById(R.id.EditText01))=="") test=1;
if (i==2 && ((EditText)findViewById(R.id.EditText02))=="") test=1;
.....etc.
if (i==11 && ((EditText)findViewById(R.id.EditText11))=="") test=1;
if (test==1)
Toast.makeText(getApplicationContext(), "Dont leave points empty", 0).show();
break;
else
if (i==1) intEditText[i]:=Integer.parseInt(((EditText)findViewById(R.id.EditText1));
if (i==2) intEditText[i]:=Integer.parseInt(((EditText)findViewById(R.id.EditText2));
.... etc.
if (i==11) intEditText1[i-nos]:=Integer.parseInt(((EditText)findViewById(R.id.EditText11));
....etc.
calcul();
catch(NumberFormatException nbre)
System.out.println("Could not parse " + nbre);
public void calcul()
int myCalc;
myCalc = intEditText[1]*intEditText[2]..... / (intEditText[1]*intEditText[2].....)
//perform calculation
【讨论】:
以上是关于对数组中的元素执行算术运算 - android/java的主要内容,如果未能解决你的问题,请参考以下文章