Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为指定的案例引入新的if条件,而不提供任何业务逻辑来实现该案例?_Java_Oop_If Statement - Fatal编程技术网

Java 如何为指定的案例引入新的if条件,而不提供任何业务逻辑来实现该案例?

Java 如何为指定的案例引入新的if条件,而不提供任何业务逻辑来实现该案例?,java,oop,if-statement,Java,Oop,If Statement,本质上,任务是在下面的代码中引入一个id为10的新状态(dtl.getoptstatid()为10)。我被要求对此代码进行任何必要的更改,以添加所需的功能(添加额外的operation stat id)。有什么明显的东西我遗漏了吗 我得到了以下提示: 如果您正在做的唯一一件事是向下面的代码中添加dtl.getoptstatid()==10,则说明您没有正确执行该操作。 public class ChangeMe { public void doOp(Operation op, Map<L

本质上,任务是在下面的代码中引入一个id为10的新状态(dtl.getoptstatid()为10)。我被要求对此代码进行任何必要的更改,以添加所需的功能(添加额外的operation stat id)。有什么明显的东西我遗漏了吗

我得到了以下提示: 如果您正在做的唯一一件事是向下面的代码中添加dtl.getoptstatid()==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(操作op、地图解除操作Map、操作汇总){
对于(int d=0;d
这就是我目前所拥有的。考虑到没有为传递给此方法的对象提供任何实现,我想不出任何其他的(doOp())

public static void doOp(操作op,映射relief操作Map,操作summary sum){
/*for循环中缺少增量条件,将无限循环
ArrayList的第一个元素(op.getOperationDetails())*/
对于(int d=0;d
要回顾我的更改: *在for循环中添加了一个“d++”,否则它将永远在列表的第一个元素上循环

*添加了一个带有空业务逻辑的else if(dtl.getoptstatid()==10)条件…我知道他们说这是错误的,但我想不出其他任何东西


*删除中断条件否则将只检查循环的第一个元素并退出for循环

您应该修复/清理代码吗

首先,正如您已经看到的,
中断
必须停止,否则循环永远不会循环。
所以把它拿走

但是,如果删除它,循环将永远运行,因为
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);
        }
    }
}
现在问问自己,
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");
    }
}
最后,“引入一个id为10的新状态(
dtl.getoptstatid()
is 10)”。
好吧,因为
getoptstatid()
没有在任何地方使用,所以代码将支持任何新状态,无需修改,因此无需做任何事情

现在你已经意识到了这一点,你可以回到原来的作业了。您是被要求“修复”代码,还是仅仅支持状态10?记住,根据你写的:

任务是在下面的代码中引入一个id为10的新状态(dtl.getoptstatid()为10)。我被要求对此代码进行任何必要的更改,以添加所需的功能


因此,真正的答案是:无需更改代码

这非常完美,它确实帮助我密切关注这些简单的优化。非常感谢你!我希望有一天我能像你一样轻松地解决这些问题!如果这是一个面试问题,我想他们希望你展示出拥有良好OO设计的能力。在这种特殊情况下,
op
dtl
经常被查询,返回值用于执行其他操作。所有这些查询都应该封装在
操作
操作细节
类中。
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");
        }
    }
}
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 (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");
    }
}