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