对数组中的元素执行算术运算 - 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[] arrayOfEditTextEditText[] 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;

更精细的点

arrayOfEditTextarrayOfEditText1 定义为对整个班级可见,如下所示:

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...

您应该知道数组是一个零索引列表。所以数组中的第一个条目(arrayOfEditTextarrayOfEditText1)是 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的主要内容,如果未能解决你的问题,请参考以下文章

40篇学完C语言——(第七篇)地址算术运算

MATLAB-算术运算

Python开发---29numpy

NumPy基础-数组与向量化计算

C#如何对二维数组矩阵进行算术运算

数组和标量之间的运算