我如何改变这个java方法,不依赖于lotNumber-1

时间:2013-06-04 04:58:22

标签: java arrays sorting

使用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代码向正确的方向提示会没问题。 我真的很困惑这项练习要求我做什么。

我会提前做这个,这是一个班级,老师真的只是把书交给我们,很少有指导。所以我不是在找人写作业,我只想要一些帮助。请不要因为我的要求而激怒我。这是一个提问编码问题的地方?没有?提前致谢。

2 个答案:

答案 0 :(得分:1)

给定方法的算法依赖于批量lotNumber存储在索引lotNumber-1中。它只是按索引查找并验证它找到了正确的。

演习是放弃这个假设。批号和索引不再是密切相关的。所以你不能只计算索引,你必须搜索

最简单的方法是查看集合中的每个批次,并在找到匹配的批号后返回。为此可以显式或隐式地使用迭代器(“foreach”)。如果您的课程尚未涵盖迭代器,您还可以使用for循环来计算集合中所有现有索引。

但是练习指定批次仍然按顺序存储。这允许您修改简单的方法,一旦您发现批号高于您正在寻找的数量,就会放弃。

最佳方法是将搜索算法用于排序列表,例如binary search

答案 1 :(得分:0)

在您提供的代码中,有一个很大的假设:假设批号i存储在位置i-1的数组中。现在如果我们不假设呢?好吧,我们不知道数组中有多少i,所以唯一的解决方案是遍历数组并查找批号i,希望我们能找到它。