将循环中的 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 添加到列表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

迭代循环并将列表添加到新行或新列中的数据框

将for循环中的字符串值添加到列表中[重复]

使用Kotlin中的foreach循环遍历BigInteger值

如何使用 for 循环重命名另一个列表中的列表元素?

如何将整数添加到列表中的每个元素?

将输出重定向到for循环shell中特定目录中的多个文件