所以今天早些时候我写了一个个人用途的方法,它总结了作为参数给出的整数:
public class BigSum {
public static int sum(int... numbers) {
int sum = 0;
for(int n : numbers) {
sum += n;
}
return sum;
}
}
后来发现int值对于我的程序来说太小了,所以我切换到BigIntegers。我决定如果方法将Strings作为参数,将它们转换为BigIntegers然后对它们求和,那会更容易:
import java.math.*;
public class BigSum {
public static BigInteger sum(String... numbers) {
BigInteger sum = BigInteger.ZERO;
for(String n : numbers) {
BigInteger x = new BigInteger(n);
sum = sum.add(x);
}
return sum;
}
}
这段代码的唯一问题是你需要在双引号之间给出参数(因为它需要字符串),而且它通常非常不方便。
我可以为sum
方法做什么来接受这样的参数:
BigInteger NUMBER = BigSum.sum(5, 6);
而不是:
BigInteger NUMBER = BigSum.sum("5", "6");
答案 0 :(得分:3)
您可以接受Object...
作为参数并使用toString()
方法:
public static BigInteger sum(Object... numbers) {
BigInteger sum = BigInteger.ZERO;
for(Object n : numbers) {
BigInteger x = new BigInteger(n.toString());
sum = sum.add(x);
}
return sum;
}
// ...
BigInteger sum1 = BigSum.sum("5", 6); // 11
// With a real big integer
BigInteger sum2 = BigSum.sum("1234567891011121314151617181920", 1);
// 1234567891011121314151617181921
如果该数字不是BigInteger的有效表示,则此代码将抛出NumberFormatException
。
答案 1 :(得分:1)
在您使用BigInteger
检查之前,请确保您不能简单地使用long
基元类型。 long
类型包含比int
基元类型大得多的值,并且不需要创建BigInteger
对象的开销。
但是,如果您的总和将增长到超出long
容量的大小,但您的各个部分确实适合long
类型,那么您可以切换方法以获取{{1}的数组}值然后使用long
来保存总数。这样的方法可能如下所示:
BigInteger
答案 2 :(得分:0)
你可以改变你的课程 -
public static BigInteger sum(BigInteger... numbers) {
BigInteger sum = BigInteger.ZERO;
for(BigInteger n : numbers) {
BigInteger x = new BigInteger(n);
sum = sum.add(x);
}