Java: Как я могу сократить коды, которые часто используются?
Я работаю над приложением для 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());
Есть ли какой-то конкретный способ избавиться от тех же строк?
2 ответа
Решение
Да. Вместо того, чтобы иметь разные функции для каждого Button
просто используйте один и получите id of the
кнопка. I assume you are declaring the
onClick` в вашем xml. Просто объявите ту же функцию, если все они делают одно и то же
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));
}
Если я понимаю, что вы хотите, то это будет держать от необходимости разных методов, чтобы сделать то же самое
Напишите полезный метод как:
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;
}