분수가있는 텍스트 파일을 가져 오려고합니다. 문자열에서 분수를 bigdecimal로 변환하십시오. 그런 다음 스택에 결과를 나누어 저장하십시오.스레드 "main"의 예외 java.lang.NumberFormatException : 범위 밖의 기수
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));
}
이 오류가 발생했습니다. "주"java.lang.NumberFormatException의 스레드에서
이예외 :. 기수 범위 중 java.math.BigInteger의에서 (알 수없는 소스) sorting.separateStrings에서 (sorting.java:60) < --- 인 분자를 BigInteger로 변환하려고합니다.
at sorting.main (sorting.java:26) < --- 여기서 separateStrings를 호출합니다.
가에 파산하는 문자열
는 분자했다 = "9821020392310432153773517114542035029"내가이 오류를 받고 있어요 이유를 모르겠어요. 나는 BigInteger가 길이 50까지 일 수 있다는 인상 아래에있었습니다. 게다가, 그것은 "8731472450870/1572580584296783758"이었던 txt의 첫 번째 줄에서 작업했습니다.
BigDecimal BD2 = new BigDecimal(new BigInteger(denominator, 10));
.. 제 PARAM
감사 팁을위한 – Boid