gpt4 book ai didi

java - 线程 "main"java.lang.NumberFormatException : Radix out of range 中的异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:49 28 4
gpt4 key购买 nike

我正在尝试获取一个包含分数的文本文件。将分数从字符串转换为 bigdecimal。然后划分并将结果存储在堆栈上。

txt 文件中的每一行都是一个分数,它是随机生成的,用字符“/”分隔分子和分母。分子和分母的长度可以是1-50,并且必须大于0。数字是随机生成的,因此需要存储小数位。在我的代码中,我先将字符串转换为 BigInteger,然后再转换为 BigDecimal。这适用于第一个字符串,但在第二个字符串的分子上中断。

public static void main(String[] args) throws FileNotFoundException {
File file = new File("C:/Users/eric/workspace/sortProj/src/data.txt");

FileReader fr = new FileReader(file);
Scanner scanner = new Scanner(fr);
Stack<BigDecimal> pile = new Stack<BigDecimal>();
String numerator = "";
String denominator = "";

while (scanner.hasNextLine()) {
String str = scanner.nextLine();
numerator = "";
denominator = "";

separateStrings(pile, numerator, denominator, str);
}
}


// appends chars to numerator string until it hits '/' then appends chars to
// denominator string
public static void separateStrings(Stack<BigDecimal> stack,
String numerator, String denominator, String source) {
boolean isNumerator = true;
for (int i = 0; i < source.length(); i++) {
if (source.charAt(i) == '/') {
isNumerator = false;

}
else if (isNumerator == true) {
numerator += source.charAt(i);
}else{
denominator += source.charAt(i);
}
}
//converts and stores fractions.

BigDecimal BD2 = new BigDecimal(new BigInteger(denominator, denominator.length()));
BigDecimal BD1 = new BigDecimal(new BigInteger(numerator, numerator.length()));
stack.push(BD1.divide(BD2, 20, BigDecimal.ROUND_FLOOR));
}

我遇到了这个错误。

线程“main”中的异常 java.lang.NumberFormatException: Radix out of range在 java.math.BigInteger.(未知来源)在 sorting.separateStrings(sorting.java:60)<---我尝试将分子转换为 BigInteger。

在 sorting.main(sorting.java:26)<--- 我调用 separateStrings 的地方。

它打破的字符串是 numerator = "9821020392310432153773517114542035029"

我不确定为什么会收到此错误。我的印象是 BigInteger 可以最大长度为 50。另外,它在 txt 的第一行工作,即“8731472450870/1572580584296783758”。

最佳答案

错误是由对象引起的:

new BigInteger(denominator, denominator.length())

正在尝试创建 BigInteger基数为 37,比允许的最大值 36 多 1。

在此示例中,您可能不需要设置基数,甚至不需要使用 BigInteger,因此您可以简单地使用:

BigDecimal bigDecimal = new BigDecimal(denominator);

关于java - 线程 "main"java.lang.NumberFormatException : Radix out of range 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12648588/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com