Как я мог бы изменить этот бит кода здесь для достижения того же результата? - PullRequest
0 голосов
/ 01 апреля 2020

Я работаю над приложением для школы. Я просматривал код и обнаружил следующее:

if (answerTxt1.getText().toString().matches("")) {
        infoStatus.setText("Answer1 cannot be empty!");
        return;
   } else if (answerTxt2.getText().toString().matches("")){
        infoStatus.setText("Answer2 cannot be empty!");
        return;
   } else if (answerTxt3.getText().toString().matches("")){
        infoStatus.setText("Answer3 cannot be empty!");
        return;
   } else if (answerTxt4.getText().toString().matches("")){
       infoStatus.setText("Answer4 cannot be empty!");
       return;
    }

Идея этого 'logi c' заключается в том, что в приложении есть 4 слота для записи, но ни один не может быть пустым , Если один из них пуст, в textView с именем infoStatus отобразится сообщение о возникшей исключительной ситуации.

Я знаю, что это может иметь рефакторинг и может быть выполнено в меньшем количестве строк, но я не уверен, как это сделать. До сих пор моя идея заключалась в следующем:

if (answerTxt1.getText().toString().matches("") 
             || answerTxt2.getText().toString().matches("")
             || answerTxt3.getText().toString().matches("")
             || answerTxt4.getText().toString().matches("")) {

       infoStatus.setText("One of the answers is empty!");
       return;
    }

, но я не получу сообщение с указанием c для пользователя, для которого answerTxt # пусто.

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Вы можете сделать это как

TextView[] textViews = {answerTxt1, answerTxt2, answerTxt3, answerTxt1};
for(int i=0; i<textViews.length; i++){
    if(textViews[i].getText().toString().isEmpty()){
        infoStatus.setText("Answer"+ (i+1) + " cannot be empty!");
        break;
    }
}
1 голос
/ 01 апреля 2020

Если вы определяете метод, который проверяет, является ли произвольное текстовое представление пустым, и устанавливает поле ошибки, если оно есть, например так:

boolean checkEmpty(TextView textView, String name) {
   if (textView.getText().length() == 0) {
        infoStatus.setText(name + " cannot be empty!");
        return true;
   }
   return false;
}

Тогда вы можете избавиться от большей части дублирования в Ваш код:

if (checkEmpty(answerTxt1, "answerTxt1")) {
    return;
}
if (checkEmpty(answerTxt2, "answerTxt2")) {
    return;
}
...

Вы можете go еще больше, создавая структуры данных для хранения ваших текстовых представлений и сообщений об ошибках, но это будет стоить сделать код более сложным, жестким и хрупким .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...