我正在尝试带分数的文本文件.将分数从字符串转换为十进制.然后将结果划分并存储在堆栈中.
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 pile = new Stack();
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 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));
}
我得到了这个错误.
线程“主”中的异常java.lang.NumberFormatException:基数超出范围
在java.math.BigInteger处.(未知源)
在sorting.separateStrings(sorting.java:60)< ---尝试将分子转换为BigInteger的地方.
在sorting.main(sorting.java:26)< ---在这里我称其为splitStrings.
中断的字符串是分子=“ 9821020392310410432153773517114542035029”
我不确定为什么会收到此错误.我的印象是BigInteger可以
最长为50.此外,它还可以处理txt的第一行,即“ 8731472450870/1572580584296783758”.