为何出现「类型不匹配:无法从double转换为int」错误?
问题:int数组赋值时出现「无法从double转换为int」错误
我尝试将一个整数的每一位数字进行n次幂运算(n为该整数的位数),并将结果存入int类型数组中。
代码如下:int[] digits = Integer.toString(number) .chars() .map(c -> Math.pow(c-'0', Double.toString(number).length())) .toArray();但运行时提示错误:「类型不匹配:无法从double转换为int」,请问这是为什么?
错误原因
Math.pow()的返回值是double类型,而chars()返回的IntStream的map()方法要求映射后的结果必须是int类型。Java不会自动将double转为int(避免隐式转换导致的精度丢失),因此触发类型不匹配错误。- 额外冗余操作:用
Double.toString(number).length()获取位数完全没必要,直接用Integer.toString(number).length()即可,无需额外转成Double类型。
修正方案
方案1:显式转换double为int
将Math.pow()的结果强制转为int,同时优化位数获取逻辑:
int digitCount = Integer.toString(number).length(); int[] digits = Integer.toString(number) .chars() .map(c -> (int) Math.pow(c - '0', digitCount)) .toArray();
方案2:纯整数幂运算(避免浮点转换)
如果担心Math.pow()的浮点精度问题,可以自己实现整数的幂运算:
int digitCount = Integer.toString(number).length(); int[] digits = Integer.toString(number) .chars() .map(c -> { int digit = c - '0'; int powerResult = 1; for (int i = 0; i < digitCount; i++) { powerResult *= digit; } return powerResult; }) .toArray();
内容的提问来源于stack exchange,提问作者Alix Blaine
相关产品推荐
相关产品推荐

