【问题标题】:Performing arithmetic operations on the elements in an array - android/java对数组中的元素执行算术运算 - 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

那么有人可以帮我完成这个编码吗? :)

【问题讨论】:

    标签: java android arrays logic


    【解决方案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
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 2015-06-02
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多