每当我运行程序时,我都会收到此错误:
BigDecimal lower = new BigDecimal("1000001520");
BigDecimal upper = new BigDecimal("9999997560");
int var = 2520;
String strL = lower.toString();
Integer intL = Integer.valueOf(strL);
String strU = upper.toString();
Integer intU = Integer.valueOf(strU);
该程序有两个几乎相同的do-while循环,第一个完美地工作。我只遇到第二个问题。
intL = intL + var;
intU = intU - var;
两个数字的位数相同,并以相同的方式转换为整数。两者在循环中的处理方式几乎相同。
public static void main(String[] args){
int idx = 0;
int[] myArray = new int[5];
Random rnd = new Random();
int val = rnd.nextInt(76);
do{
if(numExistInArray(val, myArray))
val = rnd.nextInt(76); //if val exist in array, generate another number
else
myArray[idx++] = val; //if val not exist in array, fill array
}while(idx != myArray.length); //do not exit loop till all numbers are filled
}
public static boolean numExistInArray(int val, int[] array){
for(int x=0; x<array.length; x++)
if(array[x] == val)
return true;
return false;
}
我也试过这个,没有从BigDecimal转换为String,直接输入数字到String,但仍然有同样的错误。
编辑我使用的是BigDecimal,因为它是我老师希望我们在工作中使用的一部分。我知道不需要它。
答案 0 :(得分:3)
显然你会得到一个数字格式异常,因为可以存储在整数中的最大值是2,147,483,647,小于9,999,997,560。
另一方面,1,000,001,520小于2,147,483,647,这就是为什么工作正常。
(根据Tunaki的建议编辑)仅供参考 - 此外你真的不必使用BigDecimal,因为看起来你需要它的唯一原因是将它转换为整数。所以这不是必需的。
同样不需要Integer,因为您似乎不需要引用类型,因此原始类型int应该是apt。此外,在你的for循环中,你正在添加和减去Integer中的值,这将导致不必要的装箱和拆箱,效率非常低。所以使用原型int会更好。
答案 1 :(得分:-2)
使用intValue()方法
将BigInteger转换为IntegerBigDecimal lower = new BigDecimal("1000001520");
BigDecimal upper = new BigDecimal("9999997560");
Integer intBL = lower.intValue();
Integer intBU = upper.intValue();