Как ввести новое условие if для указанного случая без какой-либо бизнес-логики, заданной для реализации этого случая? - PullRequest
0 голосов
/ 29 сентября 2018

По сути, задача состоит в том, чтобы ввести новый статус с идентификатором 10 (dtl.getOpStatId () равен 10) в приведенном ниже коде.Меня попросили внести все необходимые изменения в этот код, чтобы добавить необходимые функциональные возможности (чтобы добавить дополнительный идентификатор статистики операций).Есть ли что-то очевидное, что мне не хватает ????

Мне дали следующий совет: , если единственное, что вы делаете, это добавляете dtl.getOpStatId () == 10 к приведенному ниже коду,Вы делаете это неправильно.

public class ChangeMe {

public void doOp(Operation op, Map<Long, String> reliefOperationMap, OperationSummary sum) {
    for (int d = 0; d < op.getOperationDetails().size(); ) {
        OperationDetail dtl = op.getOperationDetails().get(d);
        if (dtl.getOpStatId() == 1 || dtl.getOpStatId() == 3 || dtl.getOpStatId() == 4) {
            sum.setOpCond(true);
            if (dtl.getRelblkId() != null && dtl.getOperationsumRefId() != null && dtl.getOperationsumParentId() != null) {
                sum.setIsReliefOperation("Y");
                reliefOperationMap.put(dtl.getOperationsumId(), "Y");
            }
        } else {
            if (dtl.getRelblkId() != null && dtl.getOperationsumRefId() != null && dtl.getOperationsumParentId() != null) {
                sum.setOpCond(true);
                sum.setIsReliefOperation("Y");
                reliefOperationMap.put(dtl.getOperationsumId(), "Y");
            } else {
                sum.setOpCond(true);
            }
        }
        break;
      }
   }
}

Это то, что я имею до сих пор.Я не могу думать ни о чем другом , учитывая, что для объектов, передаваемых этому методу (doOp ()), не даны реализации.

public static void doOp(Operation op, Map<Long, String> reliefOperationMap, OperationSummary sum) {

/*Missing increment condition from for loop, will be endlessly looping on 
the first element of the ArrayList (op.getOperationDetails())*/

    for (int d = 0; d < op.getOperationDetails().size(); d++ ) {
        OperationDetail dtl = op.getOperationDetails().get(d);
        if (dtl.getOpStatId() == 1 || dtl.getOpStatId() == 3 || dtl.getOpStatId() == 4) {
            sum.setOpCond(true);
            if (dtl.getRelblkId() != null && dtl.getOperationsumRefId() != null && dtl.getOperationsumParentId() != null) {
                sum.setIsReliefOperation("Y");
                reliefOperationMap.put(dtl.getOperationsumId(), "Y");
                System.out.println("Reached 1 or 3 or 4");
            }
        }else if(dtl.getOpStatId() == 10){

            //business logic for OpStatId here

        }else {
            System.out.println("Reached anything but 1,3 or 4");
            if (dtl.getRelblkId() != null && dtl.getOperationsumRefId() != null && dtl.getOperationsumParentId() != null) {
                sum.setOpCond(true);
                sum.setIsReliefOperation("Y");
                reliefOperationMap.put(dtl.getOperationsumId(), "Y");
            } else {
                sum.setOpCond(true);
            }
        }
/*removed break from here, no point of having a for loop if you're only 
 ever checking the first element of the Arraylist*/
    }
}
}

Чтобы подвести итоги моих изменений: * Добавлен 'd ++' в цикле for, иначе он будет зацикливаться навсегда на первом элементе списка.

* Добавлен else-условие if (dtl.getOpStatId () == 10) с пустой бизнес-логикой ... Я знаю, что они сказали, что это неправильно, но я не могу думать ни о чем другом

* удалил условие разрыва, иначе только проверил быпервый элемент цикла и выход из цикла for

1 Ответ

0 голосов
/ 29 сентября 2018

Вы должны исправить или очистить код?

Во-первых, как вы уже видели, break должен идти, иначе цикл никогда не будет зацикливаться.
Так что удалитеit.

Но, если вы удалите его, цикл будет выполняться вечно, поскольку d никогда не увеличивается.
Поэтому добавьте d++, иначе цикл будет выполняться вечно.

for (int d = 0; d < op.getOperationDetails().size(); d++) {
    OperationDetail dtl = op.getOperationDetails().get(d);
    if (dtl.getOpStatId() == 1 || dtl.getOpStatId() == 3 || dtl.getOpStatId() == 4) {
        sum.setOpCond(true);
        if (dtl.getRelblkId() != null && dtl.getOperationsumRefId() != null && dtl.getOperationsumParentId() != null) {
            sum.setIsReliefOperation("Y");
            reliefOperationMap.put(dtl.getOperationsumId(), "Y");
        }
    } else {
        if (dtl.getRelblkId() != null && dtl.getOperationsumRefId() != null && dtl.getOperationsumParentId() != null) {
            sum.setOpCond(true);
            sum.setIsReliefOperation("Y");
            reliefOperationMap.put(dtl.getOperationsumId(), "Y");
        } else {
            sum.setOpCond(true);
        }
    }
}

Теперь спросите себя, когда sum.setOpCond(true); не вызывается?
Он всегда вызывается, поэтому переместите его за пределы if операторов.

for (int d = 0; d < op.getOperationDetails().size(); d++) {
    OperationDetail dtl = op.getOperationDetails().get(d);
    sum.setOpCond(true);
    if (dtl.getOpStatId() == 1 || dtl.getOpStatId() == 3 || dtl.getOpStatId() == 4) {
        if (dtl.getRelblkId() != null && dtl.getOperationsumRefId() != null && dtl.getOperationsumParentId() != null) {
            sum.setIsReliefOperation("Y");
            reliefOperationMap.put(dtl.getOperationsumId(), "Y");
        }
    } else {
        if (dtl.getRelblkId() != null && dtl.getOperationsumRefId() != null && dtl.getOperationsumParentId() != null) {
            sum.setIsReliefOperation("Y");
            reliefOperationMap.put(dtl.getOperationsumId(), "Y");
        }
    }
}

Теперьспросите себя, в чем разница между блоком if и блоком else?
Нет, поэтому исключите внешний оператор if.

for (int d = 0; d < op.getOperationDetails().size(); d++) {
    OperationDetail dtl = op.getOperationDetails().get(d);
    sum.setOpCond(true);
    if (dtl.getRelblkId() != null && dtl.getOperationsumRefId() != null && dtl.getOperationsumParentId() != null) {
        sum.setIsReliefOperation("Y");
        reliefOperationMap.put(dtl.getOperationsumId(), "Y");
    }
}

Теперь измените цикл нарасширенный for цикл.

for (OperationDetail dtl : op.getOperationDetails()) {
    sum.setOpCond(true);
    if (dtl.getRelblkId() != null && dtl.getOperationsumRefId() != null && dtl.getOperationsumParentId() != null) {
        sum.setIsReliefOperation("Y");
        reliefOperationMap.put(dtl.getOperationsumId(), "Y");
    }
}

И наконец, "вводит новый статус с идентификатором 10 (dtl.getOpStatId() равен 10)" .
Ну, так как getOpStatId()больше нигде не используется, код будет поддерживать любой новый статус без изменений, поэтому делать нечего.

Теперь, когда вы поняли это, вы можете на самом деле вернуться к источнику.все назначение.Вас действительно просили «исправить» код или просто поддерживать статус 10?Помните, согласно тому, что вы написали:

задача состоит в том, чтобы ввести новый статус с идентификатором 10 (dtl.getOpStatId () равен 10) в приведенном ниже коде.Меня попросили внести необходимые изменения в этот код, чтобы добавить необходимые функции

Итак, реальный ответ: Нет коданеобходимо изменить!

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