将循环中的 BigInteger 添加到列表 [重复]
Posted
技术标签:
【中文标题】将循环中的 BigInteger 添加到列表 [重复]【英文标题】:add BigInteger in a loop to a List [duplicate] 【发布时间】:2018-08-19 16:15:18 【问题描述】:我被一个可能很简单的事情困住了,但我就是想不通。 所以这是代码:
List<BigInteger> list = new ArrayList<BigInteger>();
for (int i = 1; i <= 12; i++)
list.add(new BigInteger("i"));
我得到以下异常:
线程“主”
java.lang.NumberFormatException
中的异常:对于输入字符串:"i"
没看懂,i是1-12之间的整数,应该可以转换成BigInteger。
【问题讨论】:
遇到此类问题时,请务必查看课程的documentation。文档清楚地指出,输入必须代表一个有效的BigInteger
,而文本"i"
(字面上只包含字符 i
)显然不是有效数字。您需要首先评估变量,提取其数字并将此数字转换为 String
,例如 i + ""
或 String.valueOf(i)
。
【参考方案1】:
List<BigInteger> list = new ArrayList<BigInteger>();
for (int i = 1; i <= 12; i++)
list.add(BigInteger.valueOf(i)); // Fix
这种方式比所选答案更有效,因为所选答案首先将int
转换为String
,然后将String
解析回int
,这确实很慢。
【讨论】:
【参考方案2】:字符串"i"
不是BigInteger
的有效表示。
由于BigInteger
类中没有构造函数采用单个int
参数,因此您可以使用String.valueOf
返回整数i
的字符串表示形式:
list.add(new BigInteger(String.valueOf(i)));
【讨论】:
谢谢,成功了! 使用docs.oracle.com/javase/7/docs/api/java/math/…会更干净一点 我认为混淆来自"i"
没有解释i
的值,而是表示文本"i"
字面上包含字符 i
,而不是将i
解释为变量后的值。尤其是 php 等其他语言解释字符串中的变量,Java 不会。
@Zabuza 我猜是这样,在 C# 中也可以使用 $"i"
,这会起作用。我想这是 Java 的功能与其他语言不同。这是完全可以理解的 IMO。以上是关于将循环中的 BigInteger 添加到列表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章