写作分区算法中的错误

时间:2017-10-30 12:59:02

标签: java algorithm math arraylist linked-list

我一直在编写一些方法来将Java中的LinkedList视为科学记数法的无限数组。第一个索引是整数,其余是小数。我一直在研究两个LinkedLists之间的除法算法,但是遇到了很多麻烦。现在,我的代码经历了一个无限循环。如果有人可以帮我找到问题(我不需要为我编写的解决方案xD),我就差不多了。假设我写的其他方法都是正确的。

public static LinkedList<Integer> divide(LinkedList<Integer> a, LinkedList<Integer> b) {
    LinkedList<Integer> arr = new LinkedList<Integer>();
    LinkedList<Integer> base = new LinkedList<Integer>();
    base.add(a.get(0));
    boolean incomplete = true;
    int i = 0;

    while (incomplete) {
        LinkedList<Integer> multiplier = new LinkedList<Integer>();
        multiplier.add(1);
        while (LinkedListMethods.lessThan(LinkedListMethods.multiply(b, multiplier), base)) {
            multiplier.set(0, multiplier.get(0) + 1);
        }
        multiplier.set(0, multiplier.get(0) - 1);

        LinkedList<Integer> multiple = new LinkedList<Integer>();
        multiple = LinkedListMethods.multiply(b, multiplier);
        base = LinkedListMethods.subtract(base, multiple);

        arr.add(multiplier.get(0));

        base = LinkedListMethods.clean(base);

        if (i == a.size() - 1 && base.get(0) == 0) {
            incomplete = false;
        } else if (i == arr.size() - 1) {
            a.add(0);
        }

        i++;
    }

    return clean(arr);
}

感谢您的帮助!

编辑1:lessThan(a,b)如果&lt; b(它已经过测试工作)

编辑2:其他方法在http://javaman.net/code/larger-decimals上升(由于某种原因,它很紧凑且无法读取)

1 个答案:

答案 0 :(得分:1)

while (incomplete) {
        LinkedList<Integer> multiplier = new LinkedList<Integer>();
        multiplier.add(1);
        while (LinkedListMethods.lessThan(LinkedListMethods.multiply(b, multiplier), base)) {
            multiplier.set(0, multiplier.get(0) + 1);
        }

您永远不会在While循环中更新不完整的值,因此它始终为true。您需要以某种方式更新值或重构代码。

Maximum size of HashSet, Vector, LinkedList

有关于链表的较大实际大小的一些信息。即使理论上它们没有上限,但在某些时候你会达到整数可以达到的最大值极限。