【问题标题】:add BigInteger in a loop to a List [duplicate]将循环中的 BigInteger 添加到列表 [重复]
【发布时间】: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)

标签: java


【解决方案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)));
    

    【讨论】:

    • 谢谢,成功了!
    • 我认为混淆来自"i" 没有解释i 的值,而是表示文本"i" 字面上包含字符 i,而不是将i 解释为变量后的值。尤其是 PHP 等其他语言解释字符串中的变量,Java 不会。
    • @Zabuza 我猜是这样,在 C# 中也可以使用 $"{i}",这会起作用。我想这是 Java 的功能与其他语言不同。这是完全可以理解的 IMO。
    猜你喜欢
    • 2018-05-27
    • 2014-12-17
    • 2015-06-20
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    相关资源
    最近更新 更多