我一直在编写一些方法来将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上升(由于某种原因,它很紧凑且无法读取)
答案 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
有关于链表的较大实际大小的一些信息。即使理论上它们没有上限,但在某些时候你会达到整数可以达到的最大值极限。