我有一个BigInts的arrayDeque,实际上已实现为仅持有字符串IE BigInt@Instancewhatever = "3476234236734567"
我已经有一种方法将一个BigInt添加到另一个中,该方法返回一个新的BigInt,其中包含两个BigInts之和的字符串。
IE浏览器
BigInt@1 = "4321"
BigInt@2 = "5555"
BigInt@Sum = "9876"
我的问题是如何遍历此双端队列并在BigInts上调用add。
我当时想在ArrayDeque的大小上使用forloop,但是ArrayDeque并没有像普通ArrayList那样真正具有
x.get(x.size()-1)
功能。编辑:对于更多的推断,这是我目前正在使用的。
digit是字符串IE的列表格式
"1,2,3,4","5,5,5,5"
等public BigInt times(BigInt operand){
List<Integer> a = this.getDigit();
List<Integer> b = operand.getDigit();
//sum left unused atm
List<Integer> sum = operand.getDigit();
Deque<BigInt> temp = new ArrayDeque<>();
Deque<BigInt> temp1 = new ArrayDeque<>();
if(a.size() > b.size()){
temp1 = multiply(a,b,temp);
//Iterate here?
} else {
temp1 = multiply(b,a,temp);
//Iterate here?
}
return new BigInt(temp1.toString());
}
最佳答案
ArrayDeque<T>
实现了Iterable<T>
,因此您可以对其使用for-each循环:
ArrayDeque<BigInt> deque = new ArrayDeque<BigInt>();
//populate deque
BigInt sum = new BigInt("0");
for(BigInt b : deque) {
sum = sum.add(b);
}
//sum now holds the sum of the elements in deque.
假设您的
BigInt
类具有方法add(BigInt b)
。您已经实现了它,或者您打算使用BigInteger
,它是大型int的内置类。总结双端队列中元素的一种更高级的方法是使用流减少操作和方法引用:
ArrayDeque<BigInt> deque = new ArrayDeque<>();
//populate deque...
BigInteger sum = deque.stream().reduce(BigInt::add).orElseGet(() -> new BigInt("0"));