如何在android中编写复杂的平均方程?

时间:2014-03-23 12:34:04

标签: android average calculator equation

我有一个应用程序,它计算两种类型的平均值,一种是简单的,第二种是更复杂的,我无法弄清楚如何写出它的等式。我写它的方式是它应该如何计算,但我得到语法错误,如" {"。等式应该这样做:将值的总和除以输入的数量的数量,然后将结果乘以3加上另一个值,然后将结果除以4.希望您完全理解。谢谢 ! !

这是我的:

等式:

double total2 = {[(i + j + k + l + m + n + o + p + q + r)/numarValori2] x 3 + r}/(double)4;

当我尝试计算第一个平均值而不是第二个平均值时会发生这种情况! 的 Medii.java:

package com.cngcnasaud.orar;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;

public class Medii extends Activity {

    EditText txtNum1;
    EditText txtNum2;
    EditText txtNum3;
    EditText txtNum4;
    EditText txtNum5;
    EditText txtNum6;
    EditText txtNum7;
    EditText txtNum8;
    EditText txtTotal;
    EditText txtNum10;
    EditText txtNum11;
    EditText txtNum12;
    EditText txtNum13;
    EditText txtNum14;
    EditText txtNum15;
    EditText txtNum16;
    EditText txtNum17;
    EditText txtNum18;
    EditText txtNum19;
    EditText txtNum20;
    EditText txtTotal2;
    Button btnCal;
    Button btnCal2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.medii);

        txtNum1 = (EditText) findViewById(R.id.editText1);
        txtNum2 = (EditText) findViewById(R.id.editText2);
        txtNum3 = (EditText) findViewById(R.id.editText3);
        txtNum4 = (EditText) findViewById(R.id.editText4);
        txtNum5 = (EditText) findViewById(R.id.editText5);
        txtNum6 = (EditText) findViewById(R.id.editText6);
        txtNum7 = (EditText) findViewById(R.id.editText7);
        txtNum8 = (EditText) findViewById(R.id.editText8);
        txtTotal = (EditText) findViewById(R.id.editText9);
        btnCal = (Button) findViewById(R.id.bmedii);
        txtNum10 = (EditText) findViewById(R.id.editText10);
        txtNum11 = (EditText) findViewById(R.id.editText11);
        txtNum12 = (EditText) findViewById(R.id.editText12);
        txtNum13 = (EditText) findViewById(R.id.editText13);
        txtNum14 = (EditText) findViewById(R.id.editText14);
        txtNum15 = (EditText) findViewById(R.id.editText15);
        txtNum16 = (EditText) findViewById(R.id.editText16);
        txtNum17 = (EditText) findViewById(R.id.editText17);
        txtNum18 = (EditText) findViewById(R.id.editText18);
        txtNum19 = (EditText) findViewById(R.id.editText19);
        txtTotal2 = (EditText) findViewById(R.id.editText20);
        btnCal2 = (Button) findViewById(R.id.bmedii12);

        btnCal.setOnClickListener(new ClickButton ());
        btnCal2.setOnClickListener(new ClickButton());

    }


    private class ClickButton implements Button.OnClickListener{

        @Override
        public void onClick(View v) {

            int a = txtNum1.getText().toString().isEmpty()?0:Integer.parseInt(txtNum1.getText().toString());
            int b = txtNum2.getText().toString().isEmpty()?0:Integer.parseInt(txtNum2.getText().toString());
            int c = txtNum3.getText().toString().isEmpty()?0:Integer.parseInt(txtNum3.getText().toString());
            int d = txtNum4.getText().toString().isEmpty()?0:Integer.parseInt(txtNum4.getText().toString());
            int e = txtNum5.getText().toString().isEmpty()?0:Integer.parseInt(txtNum5.getText().toString());
            int f = txtNum6.getText().toString().isEmpty()?0:Integer.parseInt(txtNum6.getText().toString());
            int g = txtNum7.getText().toString().isEmpty()?0:Integer.parseInt(txtNum7.getText().toString());
            int h = txtNum8.getText().toString().isEmpty()?0:Integer.parseInt(txtNum8.getText().toString());
            int numarValori = (a == 0 ? 0 : 1) + (b == 0 ? 0 : 1) + (c == 0 ? 0 : 1) + (d == 0 ? 0 : 1) + (e == 0 ? 0 : 1) + (f == 0 ? 0 : 1) + (g == 0 ? 0 : 1) + (h == 0 ? 0 : 1);
            double total = (a + b + c + d + e + f + g + h)/(double)numarValori;

            txtTotal.setText(Double.toString(total));


            int i = txtNum10.getText().toString().isEmpty()?0:Integer.parseInt(txtNum10.getText().toString());
            int j = txtNum11.getText().toString().isEmpty()?0:Integer.parseInt(txtNum11.getText().toString());
            int k = txtNum12.getText().toString().isEmpty()?0:Integer.parseInt(txtNum12.getText().toString());
            int l = txtNum13.getText().toString().isEmpty()?0:Integer.parseInt(txtNum13.getText().toString());
            int m = txtNum14.getText().toString().isEmpty()?0:Integer.parseInt(txtNum14.getText().toString());
            int n = txtNum15.getText().toString().isEmpty()?0:Integer.parseInt(txtNum15.getText().toString());
            int o = txtNum16.getText().toString().isEmpty()?0:Integer.parseInt(txtNum16.getText().toString());
            int p = txtNum17.getText().toString().isEmpty()?0:Integer.parseInt(txtNum17.getText().toString());
            int q = txtNum18.getText().toString().isEmpty()?0:Integer.parseInt(txtNum18.getText().toString());
            int r = txtNum19.getText().toString().isEmpty()?0:Integer.parseInt(txtNum19.getText().toString());
            int numarValori2 = (i == 0 ? 0 : 1) + (j == 0 ? 0 : 1) + (k == 0 ? 0 : 1) + (l == 0 ? 0 : 1) + (m == 0 ? 0 : 1) + (n == 0 ? 0 : 1) + (o == 0 ? 0 : 1) + (p == 0 ? 0 : 1) + (q == 0 ? 0 : 1) + (r == 0 ? 0 : 1);

            double total2 = {[(i + j + k + l + m + n + o + p + q + r)/numarValori2] x 3 + r}/(double)4;


        }

    }

}

L.E:

logcat的:

03-23 12:52:26.488: E/AndroidRuntime(938): FATAL EXCEPTION: main
03-23 12:52:26.488: E/AndroidRuntime(938): java.lang.ArithmeticException: divide by zero
03-23 12:52:26.488: E/AndroidRuntime(938):  at com.cngcnasaud.orar.Medii$ClickButton.onClick(Medii.java:99)
03-23 12:52:26.488: E/AndroidRuntime(938):  at android.view.View.performClick(View.java:4204)
03-23 12:52:26.488: E/AndroidRuntime(938):  at android.view.View$PerformClick.run(View.java:17355)
03-23 12:52:26.488: E/AndroidRuntime(938):  at android.os.Handler.handleCallback(Handler.java:725)
03-23 12:52:26.488: E/AndroidRuntime(938):  at android.os.Handler.dispatchMessage(Handler.java:92)
03-23 12:52:26.488: E/AndroidRuntime(938):  at android.os.Looper.loop(Looper.java:137)
03-23 12:52:26.488: E/AndroidRuntime(938):  at android.app.ActivityThread.main(ActivityThread.java:5041)
03-23 12:52:26.488: E/AndroidRuntime(938):  at java.lang.reflect.Method.invokeNative(Native Method)
03-23 12:52:26.488: E/AndroidRuntime(938):  at java.lang.reflect.Method.invoke(Method.java:511)
03-23 12:52:26.488: E/AndroidRuntime(938):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-23 12:52:26.488: E/AndroidRuntime(938):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-23 12:52:26.488: E/AndroidRuntime(938):  at dalvik.system.NativeStart.main(Native Method)

第99行:

double total2 = (((i + j + k + l + m + n + o + p + q + r)/numarValori2) * 3 + r)/(double)4;

**这就是为什么我计算第一个平均值,而不是第二个平均值!

1 个答案:

答案 0 :(得分:1)

只需将[]{}替换为等式中的(),您只能使用(),因为[]和{}在Java中具有特殊含义。

编辑1:

logcat输出几乎可以告诉您问题所在:

java.lang.ArithmeticException: divide by zero

你潜水为零,因为你潜水的唯一变量是numarValorinumarValori2,其中一个必须为0.

我认为发生的事情是这样的: 单击计算按钮时,您正在执行两个计算。如果没有为第二次计算输入任何内容,则每个输入变量都默认为0,当所有变量都为0时,numarValori2import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.view.View; import android.widget.Button; import android.widget.EditText; public class Medii extends Activity { private EditText txtNum1; private EditText txtNum2; private EditText txtNum3; private EditText txtNum4; private EditText txtNum5; private EditText txtNum6; private EditText txtNum7; private EditText txtNum8; private EditText txtTotal; private EditText txtNum10; private EditText txtNum11; private EditText txtNum12; private EditText txtNum13; private EditText txtNum14; private EditText txtNum15; private EditText txtNum16; private EditText txtNum17; private EditText txtNum18; private EditText txtNum19; private EditText txtNum20; private EditText txtTotal2; private Button btnCal; private Button btnCal2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.medii); txtNum1 = (EditText) findViewById(R.id.editText1); txtNum2 = (EditText) findViewById(R.id.editText2); txtNum3 = (EditText) findViewById(R.id.editText3); txtNum4 = (EditText) findViewById(R.id.editText4); txtNum5 = (EditText) findViewById(R.id.editText5); txtNum6 = (EditText) findViewById(R.id.editText6); txtNum7 = (EditText) findViewById(R.id.editText7); txtNum8 = (EditText) findViewById(R.id.editText8); txtTotal = (EditText) findViewById(R.id.editText9); btnCal = (Button) findViewById(R.id.bmedii); txtNum10 = (EditText) findViewById(R.id.editText10); txtNum11 = (EditText) findViewById(R.id.editText11); txtNum12 = (EditText) findViewById(R.id.editText12); txtNum13 = (EditText) findViewById(R.id.editText13); txtNum14 = (EditText) findViewById(R.id.editText14); txtNum15 = (EditText) findViewById(R.id.editText15); txtNum16 = (EditText) findViewById(R.id.editText16); txtNum17 = (EditText) findViewById(R.id.editText17); txtNum18 = (EditText) findViewById(R.id.editText18); txtNum19 = (EditText) findViewById(R.id.editText19); txtTotal2 = (EditText) findViewById(R.id.editText20); btnCal2 = (Button) findViewById(R.id.bmedii12); btnCal.setOnClickListener(new SimpleAverageClickListener()); btnCal2.setOnClickListener(new ComplexAverageClickListener()); } private double getNumberFromEditText(EditText editText, double defaultValue) throws NumberFormatException { if (editText != null) { Editable editable = editText.getText(); if (editable != null) { return Double.parseDouble(editable.toString()); } } return defaultValue; } private boolean isEditTextEmpty(EditText editText) { if (editText != null) { Editable editable = editText.getText(); if (editable != null) { return editable.toString().isEmpty(); } } return true; } private double getAverageOfEditTexts(EditText... editTexts) throws NumberFormatException{ double divider = 0.0; double sum = 0.0; for (EditText editText : editTexts) { if (!isEditTextEmpty(editText)) { divider++; sum += getNumberFromEditText(editText, 0.0); } } return sum / divider; } private class SimpleAverageClickListener implements Button.OnClickListener { @Override public void onClick(View v) { try { double average = getAverageOfEditTexts(txtNum1, txtNum2, txtNum3, txtNum4, txtNum5, txtNum6, txtNum7, txtNum8); txtTotal.setText(String.valueOf(average)); } catch (NumberFormatException e) { // Exception occurred because of illegal input, do nothing. } } } private class ComplexAverageClickListener implements Button.OnClickListener { @Override public void onClick(View v) { try { double average = getAverageOfEditTexts(txtNum10, txtNum11, txtNum12, txtNum13, txtNum14, txtNum15, txtNum16, txtNum17, txtNum18); double total = (average * 3 + getNumberFromEditText(txtNum19, 0.0)) / 4.0; txtTotal2.setText(String.valueOf(total)); } catch (NumberFormatException e) { // Exception occurred because of illegal input, do nothing. } } } } 。当然后执行计算时,它将除以零。

我可以建议您对代码进行一些更改以改进它,给我一些时间,然后我会编辑我的答案。

编辑2:

这是我改进的源代码。我没有测试它(如果我在大约半小时内找到时间,我会的)但它应该可以工作:

{{1}}