1

我正在开发一个 Android 应用程序。一切似乎都很好,但我想让我的代码比现在更短。您可能会认为很多行都是重复的:

public void ButtonKlick (View view) {


    double zahl1;
    double zahl2;
    double zahl3;
    double zahl4;
    double Ergebnis = 0;
    EditText Feld1 = (EditText)findViewById(R.id.zahl1);
    EditText Feld2 = (EditText)findViewById(R.id.zahl2);
    EditText Feld3 = (EditText)findViewById(R.id.zahl3);
    EditText Feld4 = (EditText)findViewById(R.id.zahl4);
    EditText FeldErgebnis = (EditText)findViewById(R.id.etErgebnis);
    if (Feld1.getText().toString().length() == 0 ) {
        return;
    }
    if (Feld2.getText().toString().length() == 0 ) {
        return;
    }
    if (Feld3.getText().toString().length() == 0 ) {
        return;
    }
    if (Feld4.getText().toString().length() == 0 ) {
        return;
    }
    zahl1 = Double.parseDouble(Feld1.getText().toString());
    zahl2 = Double.parseDouble(Feld2.getText().toString());
    zahl3 = Double.parseDouble(Feld3.getText().toString());
    zahl4 = Double.parseDouble(Feld4.getText().toString()); 


    Ergebnis = Math.sqrt(Math.pow(zahl4 - zahl3, 2) + Math.pow(zahl2 - zahl1, 2));

    FeldErgebnis.setText(String.valueOf(Ergebnis));
}

这一切都始于两种方法:

double zahl1;

zahl4 = Double.parseDouble(Feld4.getText().toString());

有什么特定的方法可以摆脱这些相同的线条吗?

4

2 回答 2

2

编写一个实用方法,例如:

private double getDouble(EditText tv) {
   return Double.parseDouble(tv.getText().toString());
}

并称之为:

zahl4 = getDouble(Field4);

编辑:

private double getDouble(int viewId) {
   View view = findViewById(viewId);
   double toReturn = 0;
   // instanceOf returns false for null values
   if (view instanceOf EditText) 
      toReturn = Double.parseDouble(view.getText().toString());
   return toReturn;
 }
于 2013-05-01T13:17:07.063 回答
1

是的。而不是为每个功能Button使用不同的功能,并在您的 xml 中获取id of theButton . I assume you are declaring theonClick`。如果这些都做同样的事情,只需声明相同的函数

public void ButtonKlick (View view) {

 switch (view.getId())
{
    case (R.id.button1Id):
    // do specific stuff for button with id button1Id like
    Ergebnis = Math.sqrt(Math.pow(zahl4 - zahl3, 2) + Math.pow(zahl2 - zahl1, 2));
    break;
    case (R.id.button2Id):
     Ergebnis = (zahl4 - zahl3) / (zahl2 - zahl1);
     break;
     ...
}
double zahl1;
double zahl2;
double zahl3;
double zahl4;
double Ergebnis = 0;
EditText Feld1 = (EditText)findViewById(R.id.zahl1);
EditText Feld2 = (EditText)findViewById(R.id.zahl2);
EditText Feld3 = (EditText)findViewById(R.id.zahl3);
EditText Feld4 = (EditText)findViewById(R.id.zahl4);
EditText FeldErgebnis = (EditText)findViewById(R.id.etErgebnis);
if (Feld1.getText().toString().length() == 0 ) {
    return;
}
if (Feld2.getText().toString().length() == 0 ) {
    return;
}
if (Feld3.getText().toString().length() == 0 ) {
    return;
}
if (Feld4.getText().toString().length() == 0 ) {
    return;
}
zahl1 = Double.parseDouble(Feld1.getText().toString());
zahl2 = Double.parseDouble(Feld2.getText().toString());
zahl3 = Double.parseDouble(Feld3.getText().toString());
zahl4 = Double.parseDouble(Feld4.getText().toString()); 


Ergebnis = Math.sqrt(Math.pow(zahl4 - zahl3, 2) + Math.pow(zahl2 - zahl1, 2));

FeldErgebnis.setText(String.valueOf(Ergebnis));

}

如果我明白你想要什么,那么这将不需要不同的方法来做同样的事情

于 2013-05-01T13:20:18.953 回答