使用Java的对象
使用BlueJ的实用介绍
工作扔了这本书,我不明白这项练习要求我做什么。
练习是......
练习4.51重写getLot,使其不依赖于在集合中索引(数字-1)存储特定数字的批次。例如,如果已经删除了批号2,那么批号3将从索引2移动到索引1,并且所有更高批号也将被移动一个索引位置。您可以假设批次总是根据批号按递增顺序存储。
/**
* Return the lot with the given number. Return null if a lot with this
* number does not exist.
*
* @param lotNumber The number of the lot to return.
*/
public Lot getLot(int lotNumber) {
if ((lotNumber >= 1) && (lotNumber < nextLotNumber)) {
// The number seems to be reasonable.
Lot selectedLot = lots.get(lotNumber - 1);
// Include a confidence check to be sure we have the
// right lot.
if (selectedLot.getNumber() != lotNumber) {
System.out.println("Internal error: Lot number "
+ selectedLot.getNumber()
+ " was returned instead of "
+ lotNumber);
// Don't return an invalid lot.
selectedLot = null;
}
return selectedLot;
} else {
System.out.println("Lot number: " + lotNumber
+ " does not exist.");
return null;
}
}
使用pesudo代码向正确的方向提示会没问题。 我真的很困惑这项练习要求我做什么。
我会提前做这个,这是一个班级,老师真的只是把书交给我们,很少有指导。所以我不是在找人写作业,我只想要一些帮助。请不要因为我的要求而激怒我。这是一个提问编码问题的地方?没有?提前致谢。
答案 0 :(得分:1)
给定方法的算法依赖于批量lotNumber
存储在索引lotNumber-1
中。它只是按索引查找并验证它找到了正确的。
演习是放弃这个假设。批号和索引不再是密切相关的。所以你不能只计算索引,你必须搜索。
最简单的方法是查看集合中的每个批次,并在找到匹配的批号后返回。为此可以显式或隐式地使用迭代器(“foreach”)。如果您的课程尚未涵盖迭代器,您还可以使用for
循环来计算集合中所有现有索引。
但是练习指定批次仍然按顺序存储。这允许您修改简单的方法,一旦您发现批号高于您正在寻找的数量,就会放弃。
最佳方法是将搜索算法用于排序列表,例如binary search。
答案 1 :(得分:0)
在您提供的代码中,有一个很大的假设:假设批号i
存储在位置i-1
的数组中。现在如果我们不假设呢?好吧,我们不知道数组中有多少i
,所以唯一的解决方案是遍历数组并查找批号i
,希望我们能找到它。